如何使Qt项目文件(.pro)平台依赖?

时间:2013-04-26 07:58:40

标签: qt include qt-creator conditional-compilation project-files

有没有办法根据Qt-Creator的操作系统包含不同的库?

换句话说,.pro文件中的以下行是否等效:

#ifdef Q_WS_WIN
include(C:/myProject/myLybrary/my-lib.pri)
#endif

#ifdef Q_WS_X11
include(/home/user/myProject/myLybrary/my-lib.pri)
#endif

我知道字符'#'标识.pro文件中的注释。这里的替代方案是什么?

4 个答案:

答案 0 :(得分:6)

你试过这个:

unix: include(/home/user/myProject/myLybrary/my-lib.pri)
win32: include(C:/myProject/myLybrary/my-lib.pri)

答案 1 :(得分:4)

您也可以像这样使用它(如果有多个文件):

linux-g++ | linux-g++-64 | linux-g++-32 {
 # your includes
}

win32 {
 # your includes
}

答案 2 :(得分:3)

我通过操作系统假设您指的是要编译的目标体系结构。这是.pro文件运行的上下文,它可能与您正在开发的主机的操作系统相同或不同。

您可以根据要编译的qmake规范在.pro文件中指定条件表达式。例如,如果您只想在编译嵌入式Linux体系结构时包含一些库,那么您可以使用:

linux-oe-g++ {
    LIBS += -lsomelib
    HEADERS += SomeClass.h
    SOURCES += SomeClass.cpp
}

这些行仅在linux-oe-g++用作qmake的-spec参数时生效。 (这是在Qt Creator IDE中设置的,方法是将项目配置为使用具有在" Qt makespec"字段中指定的平台的工具包。)

以下C ++代码的预处理程序指令取决于您正在开发的操作系统:

#ifdef __linux__
#include "linux/mylinuxlib.h"
#endif

此条件是依赖于环境的,只有在Linux操作系统上进行开发时才是真的。它不依赖于我正在编译的目标架构。

答案 3 :(得分:0)

或者如果你喜欢交叉编译:

linux-g++-64{
# your includes
}

linux-arm-g++{
    # your includes
}