静态库的条件构建,它在qmake中依赖于多个可执行文件

时间:2016-01-11 09:54:20

标签: c++ qt qmake build-system

我有子项目:

//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_oneexecutable_two的项目。在一个我想定义MY_DEFINE,在另一个我不想。所以我试图在DEFINES += MY_DEFINE文件中添加executable_one.pro,但在这两种情况下输出都是“MY_DEFINE未定义”。我知道myLib在可执行文件之前编译时没有此标志,然后只是链接到它而没有更改,但有没有办法使库生成两次,并且其中一个可执行文件将此编译器选项传递给库?

1 个答案:

答案 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为开关取一个布尔变量),但我想如果你不能这样做问你问这个问题的方式。