C++ 在VisualStudio2010中,如何从父项目继承预处理器定义?

C++ 在VisualStudio2010中,如何从父项目继承预处理器定义?,c++,visual-studio-2010,preprocessor-directive,C++,Visual Studio 2010,Preprocessor Directive,我与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; } 在First.vcxproj中,

我与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;
}
在First.vcxproj中,我定义了

<PreprocessorDefinitions>WIN32;MY_MACRO1;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
但我得到的是:

MY_MACRO1 in first
为什么第二个项目/静态库不继承宏?我错过了什么


PS:我在谷歌搜索了2-3天后问了这个问题。

创建一个独立的属性表,然后让所有相关项目继承它

在“视图->其他窗口->属性管理器”下,右键单击其中一个项目并选择“添加新属性表”,编辑该表的属性,然后将其添加到需要继承相关属性的其他项目中


您不想继承vcxproj文件,因为这些文件包含实际的文件引用,而不仅仅是要应用于生成配置的属性。

正如@SoronelHaetir所建议的那样,我将宏添加到了.props文件中,并在两个项目中导入了该.props文件,这解决了我最初的问题


正如我在评论中提到的,还有第三个项目导入“Second”库,我不想在编译“third”时使用宏编译Second。为了实现这一点,我在未定义宏的“Second”和“Third”中添加了一个名为NewConfig的新配置(Build->configurationmanager)。在编译“第三个”时,我使用了这个新配置,而在编译“第一个”时,我使用了定义宏的配置。

“为什么第二个项目/静态库没有继承宏?”因为“同级”项目之间没有继承。特别是,第一个不是第二个的“父母”。好吧!那么,如何使“第一”成为“第二”的父对象?有没有办法做到这一点?项目之间没有继承关系。要共享设置,您需要使用属性表,可以通过发布的答案中的UI,或者编写
.props
/
.targets
文件,并手动编辑
.vcxproj
这些。谢谢!我还想做一些其他的事情,我应该在主要问题中加上这一点,但是,我还有另一个项目“第三个”,它也使用了库“第二个”。我不想将这个MY_MACRO1设置为Third,因此我希望'Second'在没有这个宏的情况下编译。简而言之,如果另一个项目使用此库(第二个),而该项目未定义此宏,则不应将其定义为“第二个”。有什么方法可以做到这一点吗?在C/C++下的预处理器页面上有一行“Unfine Preprocessor definition”,我相信它是在“Preprocessor definition”值之后应用的。
<PreprocessorDefinitions>WIN32;MY_MACRO1;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
MY_MACRO1 in first
MY_MACRO1 in second
MY_MACRO1 in first