【发布时间】: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=...>那些。
标签: c++ visual-studio-2010 preprocessor-directive