在 Visual Studio 2010 中,如何从父项目继承预处理器定义?

Posted

技术标签:

【中文标题】在 Visual Studio 2010 中,如何从父项目继承预处理器定义?【英文标题】:In visual studio 2010, how to inherit preprocessor definitions from parent project? 【发布时间】:2021-04-14 19:05:35 【问题描述】:

我有一个带有 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 天后问了这个问题。

【问题讨论】:

为什么第二个项目/静态库没有继承宏?”因为“兄弟”项目之间没有继承。特别是,First 不是 Second 的“父级”。 好的!那么我如何使“第二”的“第一”父母?有没有办法做到这一点? 项目之间没有继承关系。要共享设置,您需要使用属性表,或者通过发布答案中的 UI,或者编写 .props/.targets 文件并手动编辑 .vcxproj&lt;Import Project=...&gt; 那些。 【参考方案1】:

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

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

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

【讨论】:

谢谢!还有一些我想做的事情,我应该在主要问题本身中添加这一点,但尽管如此,我还有另一个项目“第三”,它也使用了“第二”库。我不想在第三个中设置这个 MY_MACRO1,因此我希望在没有这个宏的情况下编译“第二个”。简而言之,如果另一个项目使用这个库(第二个)并且该项目没有定义这个宏,那么它也不应该被定义为“第二个”。有没有办法做到这一点? 在 C/C++ 下的 Preprocessor 页面上有一个“Undefine preprocessor definition”行,我相信它是在“preprocessor definition”值之后应用的。【参考方案2】:

按照@SornelHaetir 的建议,我将宏添加到 .props 文件中,并将该 .props 文件导入到两个项目中,这解决了我最初的问题。

正如我在 cmets 中提到的,还有一个导入“第二”库的第三个项目,我不想在编译“第三”时使用宏编译第二。为此,我在未定义宏的“第二”和“第三”中添加了一个名为 NewConfig 的新配置(构建->配置管理器)。在编译“第三”时,我使用了这个 NewConfig,在编译“第一”时,我使用了定义宏的那个。

【讨论】:

以上是关于在 Visual Studio 2010 中,如何从父项目继承预处理器定义?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Visual Studio 2010 中使用互斥锁

如何在 Visual Studio 2008 或 Visual Studio 2010 中设置 JavaScript 断点

如何在 Visual Studio 2010 中自动折叠某些评论?

如何在 Visual Studio 2010 中设置环境变量?

如何在 Visual Studio 2010 中添加 PNG 资源?

如何设置visual studio 2010中text字体大小