Qt项目文件:根据Kit添加库

时间:2014-07-03 09:14:04

标签: qt qt-creator cross-compiling

我有一个QT项目,它运行在x86 linux和ARM linux embedded(yocto)上。 对于每个平台,我在QtCreator中定义了一个Kit,引用了相应的编译器等。

现在我想将LIBS添加到我的专业文件中,但我在每个平台上都有不同的库。我没有找到一种方法来指定依赖于编译工具包的LIBS指令。

我搜索的内容如下:

if (Kit == "Desktop")
    LIBS += ...

if (Kit == "Embedded Yocto")
    LIBS += ...

如何实现这一目标? 提前谢谢

3 个答案:

答案 0 :(得分:4)

我使用@vsz在评论here中提出的答案,将解决OP问题的方法拼凑在一起。

我有两个工具包,一个用于本地桌面,另一个用于Target_ARM设备,我想要一种方法轻松构建这两个工具包,而无需专门修改.pro文件或其他任何内容。我按照链接的答案添加了以下内容:

  • 在我的桌面工具包中(针对调试和发布),我在CONFIG+=Desktop构建步骤中添加了qmake作为额外的qmake参数。
  • 对于Target_ARM工具包,我在同一位置添加了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种可能的包含路径和库配置,具体取决于我选择的工具包(DesktopTarget_ARM)以及我选择的构建配置(buildrelease)。设置完成后,无需修改.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])
}
相关问题