我有一個專案 "First",其中有first.cpp
。#include<iostream>
#include "second.h"
using namespace std;
int main()
{
#ifdef MY_MACRO1
cout << "MY_MACRO1 in first" << endl;
#endif
second()。
return 0;
}
和一個靜態庫 "Second "與second.cpp
#include <iostream>
#include "second.h"
using namespace std;
int second()
{
#ifdef MY_MACRO1
cout << "MY_MACRO1 in second" << endl;
#endif
return 0;
}
和second.h
#ifndef THIRD
#define THIRD
int second()。
#endif
在First.vcxproj中,我定義了
<PreprocessorDefinitions>WIN32;MY_MACRO1;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>。
在Second.vcxproj的屬性中,在預處理程式定義部分,我已經勾選了 "從父專案或默認繼承"。(在這里的只讀部分,我可以看到定義沒有被繼承。從第二個專案的屬性中的 "命令列 "部分也可以得出同樣的結論。
現在,當我編譯和執行第一個專案時,我希望這段代碼的輸出是:
第一個專案中的MY_MACRO1
第二個是MY_MACRO1
但我得到的結果是:
MY_MACRO1 in first
為什么第二個專案/靜態庫沒有繼承這個宏?我在這里遺漏了什么?
PS:我是在上網搜索了2-3天后才問的這個問題。
uj5u.com熱心網友回復:
創建一個獨立的屬性表,然后讓所有相關的專案繼承它。
在View -> Other windows -> Property manager下,右擊其中一個專案并選擇 "Add new property sheet",編輯該表的屬性,然后將其添加到需要繼承相關屬性的其他專案中。
你不希望繼承vcxproj檔案,因為這些檔案包含實際的檔案參考,而不僅僅是應用于構建配置的屬性。
uj5u.com熱心網友回復:
正如@SoronelHaetir所建議的,我將宏添加到一個.props檔案中,并在兩個專案中匯入該.props檔案,這解決了我最初的問題。
正如我在評論中提到的,有一個第三個專案匯入了'Second'庫,我不想在'Third'被編譯時用宏來編譯Second。為了達到這個目的,我在'Second'和'Third'中添加了一個新的配置(Build->Config Manager),命名為NewConfig,其中沒有定義宏。在編譯'第三'時,我使用了這個 NewConfig,而在編譯'第一'時,我使用了定義了宏的那個配置。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/317248.html
標籤:
