我有子项目:
//exaple.pro
TEMPLATE = subdirs
SUBDIRS += \
myLib \
executable_one \
executable_two
myLib
是静态库,其中包含一个函数:
//MyLib.h
void foo();
//MyLib.cpp
#include "MyLib.h"
#include <iostream>
void foo()
{
# ifdef MY_DEFINE
std::cout << "MY_DEFINE is defined\n";
# else
std::cout << "MY_DEFINE is undefined\n";
# endif
}
另外两个链接到此库executable_one
和executable_two
的项目。在一个我想定义MY_DEFINE
,在另一个我不想。所以我试图在DEFINES += MY_DEFINE
文件中添加executable_one.pro
,但在这两种情况下输出都是“MY_DEFINE未定义”。我知道myLib
在可执行文件之前编译时没有此标志,然后只是链接到它而没有更改,但有没有办法使库生成两次,并且其中一个可执行文件将此编译器选项传递给库?
答案 0 :(得分:0)
如果不编译myLib
两次,你就无法做到这一点。
您必须构建两次库(最简单的是为库提供两个.pro文件),一个没有DEFINES += MY_DEFINE
的文件库。然后,两个.pro文件必须定义不同的目标(一个可以是myLib_my_define
,另一个可以是myLib_no_my_define
)。
稍后executable_one
将与myLib_my_define
相关联,executable_two
将与myLib_no_my_define
相关联。
显然,另一种方法是用常规变量替换你的预处理变量(让foo
为开关取一个布尔变量),但我想如果你不能这样做问你问这个问题的方式。