我有一个QT项目,它运行在x86 linux和ARM linux embedded(yocto)上。 对于每个平台,我在QtCreator中定义了一个Kit,引用了相应的编译器等。
现在我想将LIBS添加到我的专业文件中,但我在每个平台上都有不同的库。我没有找到一种方法来指定依赖于编译工具包的LIBS指令。
我搜索的内容如下:
if (Kit == "Desktop")
LIBS += ...
if (Kit == "Embedded Yocto")
LIBS += ...
如何实现这一目标? 提前谢谢
答案 0 :(得分:4)
我使用@vsz在评论here中提出的答案,将解决OP问题的方法拼凑在一起。
我有两个工具包,一个用于本地桌面,另一个用于Target_ARM设备,我想要一种方法轻松构建这两个工具包,而无需专门修改.pro
文件或其他任何内容。我按照链接的答案添加了以下内容:
CONFIG+=Desktop
构建步骤中添加了qmake
作为额外的qmake
参数。CONFIG+=Target_ARM
。现在,这是从链接的答案转移到OP问题的地方。我不是只想在我的代码中使用#define
ed变量,我想根据所选的工具包改变qmake
的行为。我不知道CONFIG
内置测试函数是否支持块指定(即CONFIG { _several lines here_ }
),但事实证明我可以复制并粘贴CONFIG
测试函数我想要成为条件的每一行的前面;事实上,我可以将多个CONFIG
串在一起,如下所示:
CONFIG(Desktop, Desktop|Target_ARM):unix:!macx:CONFIG(debug, debug|release): LIBS += /path/to/Desktop/debug/lib
else:CONFIG(Desktop, Desktop|Target_ARM):unix:!macx:CONFIG(release, debug|release): LIBS += /path/to/Destop/release/lib
正如它所暗示的那样,上述语句将使用适当的qmake
路径运行LIBS
,具体取决于我选择的工具包和配置。 Desktop->debug
将生成包含/path/to/Desktop/debug/lib
的Makefile,而Desktop->release
将生成包含/path/to/Desktop/release/lib
的Makefile。我对Target_ARM
工具包有类似的陈述。下面是选择正确的INCLUDEPATH
的示例:选择Target_ARM->release
时,两个测试都会评估为真。
CONFIG(Target_ARM, Desktop|Target_ARM):CONFIG(release, debug|release): INCLUDEPATH += /include/path/for/Target_ARM/release
总之,我使用这种方法来修改LIBS, INCLUDEPATH, DEPENDPATH, and PRE_TARGETDEPS
。我有4种可能的包含路径和库配置,具体取决于我选择的工具包(Desktop
或Target_ARM
)以及我选择的构建配置(build
或release
)。设置完成后,无需修改.pro
文件,只需选择工具包,构建配置,运行qmake
,然后重建。
我不知道存储CONFIG+=Desktop
(例如)数据的位置,但我想在.pro.user
文件中猜测。因此,如果有人从仓库中提取您的.pro
文件,他们可能必须以这种方式初始配置项目至少一次,但之后(只要.pro.user
文件持续存在)。 QT应该有一个简单的机制来实现这个前端和中心,特别是因为他们的一个卖点是多平台集成。如果有更好的方法,我还没有在SO或QT文档中看到它。
答案 1 :(得分:1)
您在此处拥有所有qmake变量:qt-project.org/doc/qt-4.8/qmake-function-reference.html
您可以定义变量
KIT = Desktop
#KIT = EmbeddedYocto
并使用包含功能
contains( KIT, Desktop ) {
LIBS += ...
}
contains( KIT, EmbeddedYocto ) {
LIBS += ...
}
答案 2 :(得分:0)
MY_QT_INSTALL_PREFIX=$$[QT_INSTALL_PREFIX]
equals(MY_QT_INSTALL_PREFIX,"C:/Qt/Qt5.3.1/5.3/msvc2010_opengl"){
message($$[QT_INSTALL_PREFIX])
}