在 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
到 <Import Project=...>
那些。
【参考方案1】:
创建一个独立的属性表,然后让所有相关项目继承它。
在视图下->其他窗口->属性管理器右键单击其中一个项目并选择“添加新属性表”,编辑该表的属性,然后将其添加到需要继承相关属性的其他项目中.
您不想继承 vcxproj 文件,因为这些文件包含实际的文件引用,而不仅仅是应用于构建配置的属性。
【讨论】:
谢谢!还有一些我想做的事情,我应该在主要问题本身中添加这一点,但尽管如此,我还有另一个项目“第三”,它也使用了“第二”库。我不想在第三个中设置这个 MY_MACRO1,因此我希望在没有这个宏的情况下编译“第二个”。简而言之,如果另一个项目使用这个库(第二个)并且该项目没有定义这个宏,那么它也不应该被定义为“第二个”。有没有办法做到这一点? 在 C/C++ 下的 Preprocessor 页面上有一个“Undefine preprocessor definition”行,我相信它是在“preprocessor definition”值之后应用的。【参考方案2】:按照@SornelHaetir 的建议,我将宏添加到 .props 文件中,并将该 .props 文件导入到两个项目中,这解决了我最初的问题。
正如我在 cmets 中提到的,还有一个导入“第二”库的第三个项目,我不想在编译“第三”时使用宏编译第二。为此,我在未定义宏的“第二”和“第三”中添加了一个名为 NewConfig 的新配置(构建->配置管理器)。在编译“第三”时,我使用了这个 NewConfig,在编译“第一”时,我使用了定义宏的那个。
【讨论】:
以上是关于在 Visual Studio 2010 中,如何从父项目继承预处理器定义?的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Visual Studio 2008 或 Visual Studio 2010 中设置 JavaScript 断点
如何在 Visual Studio 2010 中自动折叠某些评论?
如何在 Visual Studio 2010 中设置环境变量?