我有一個帶有 first.cpp 的專案“First”
#include<iostream>
#include "second.h"
using namespace std;
int main()
{
#ifdef MY_MACRO1
cout << "MY_MACRO1 in first" << endl;
#endif
second();
return 0;
}
以及帶有 second.cpp 的靜態庫“Second”
#include <iostream>
#include "second.h"
using namespace std;
int second()
{
#ifdef MY_MACRO1
cout << "MY_MACRO1 in second" << endl;
#endif
return 0;
}
和第二個.h
#ifndef THIRD
#define THIRD
int second();
#endif
在 First.vcxproj 中,我定義了
<PreprocessorDefinitions>WIN32;MY_MACRO1;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
在 Second.vcxproj 的屬性中,在前處理器定義部分,我勾選了“從父專案或默認繼承”。(在只讀部分,我可以看到定義沒有被繼承。可以從第二個專案的屬性中的“命令列”部分得出相同的結論。)
現在,當我編譯并執行第一個專案時,我希望這段代碼的輸出為:
MY_MACRO1 in first
MY_MACRO1 in second
但我得到的是:
MY_MACRO1 in first
為什么第二個專案/靜態庫不繼承宏?我在這里想念什么?
PS:我在谷歌搜索2-3天后問了這個問題。
uj5u.com熱心網友回復:
創建一個獨立的屬性表,然后讓所有相關專案繼承它。
在視圖 -> 其他視窗 -> 屬性管理器下,右鍵單擊其中一個專案并選擇“添加新屬性表”,編輯該表的屬性,然后將其添加到需要繼承相關屬性的其他專案中。
您不想繼承 vcxproj 檔案,因為這些檔案包含實際的檔案參考,而不僅僅是應用于構建配置的屬性。
uj5u.com熱心網友回復:
正如@SornelHaetir 所建議的那樣,我將宏添加到 .props 檔案中,并在兩個專案中匯入了該 .props 檔案,這解決了我最初的問題。
正如我在評論中提到的,有第三個專案匯入了“第二”庫,我不想在編譯“第三”時用宏編譯第二。為此,我在未定義宏的“第二”和“第三”中添加了一個名為 NewConfig 的新配置(構建->配置管理器)。在編譯“第三”時,我使用了這個 NewConfig,在編譯“第一”時,我使用了定義宏的那個。
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/417843.html
標籤:
上一篇:關于C#中數字轉換的演算法混淆
下一篇:.tfignore路徑沒有被忽略
