mbu*_*bue 8 qt cross-compiling qt-creator
我有一个QT项目,它运行在x86 linux和ARM linux嵌入式(yocto)上.对于每个平台,我在QtCreator中定义了一个Kit,引用了相应的编译器等.
现在我想将LIBS添加到我的专业文件中,但我在每个平台上都有不同的库.我没有找到一种方法来指定依赖于编译工具包的LIBS指令.
我搜索的内容如下:
if (Kit == "Desktop")
LIBS += ...
if (Kit == "Embedded Yocto")
LIBS += ...
Run Code Online (Sandbox Code Playgroud)
怎么做到这一点?先感谢您
我通过使用@vsz 在此处找到的评论中建议的答案拼凑了 OP 问题的解决方案。
我有两个工具包,一个用于本地桌面,一个用于 Target_ARM 设备,我想要一种方法来轻松构建这两个工具包,而无需专门修改.pro文件或其他任何内容。我按照链接的答案添加了以下内容:
CONFIG+=Desktop了一个附加qmake参数qmake。CONFIG+=Target_ARM在同一位置添加。现在,这就是事情从链接答案转移到 OP 问题的地方。我不只是想#define在我的代码中使用 ed 变量,我想qmake根据选定的工具包改变行为。我不知道CONFIG内置测试函数是否支持块指定(即CONFIG { _several lines here_ }),但结果证明我可以将CONFIG测试函数复制并粘贴到我想要有条件的每一行前面;事实上,我可以将多个CONFIGs串在一起,如下所示:
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
Run Code Online (Sandbox Code Playgroud)
正如它所暗示的那样,上面的语句将根据我选择的套件和配置qmake以适当的LIBS路径运行。 Desktop->debug将生成一个包含其中的 Makefile/path/to/Desktop/debug/lib而Desktop->release将生成一个包含/path/to/Desktop/release/lib. 我对Target_ARM套件有类似的陈述。下面是一个选择正确的例子INCLUDEPATH:当Target_ARM->release被选中时,两个测试都将评估为真。
CONFIG(Target_ARM, Desktop|Target_ARM):CONFIG(release, debug|release): INCLUDEPATH += /include/path/for/Target_ARM/release
Run Code Online (Sandbox Code Playgroud)
总而言之,我使用这种方法来修改LIBS, INCLUDEPATH, DEPENDPATH, and PRE_TARGETDEPS. 我有 4 种可能的包含路径和库配置,具体取决于我选择的套件(Desktop或Target_ARM)和我选择的构建配置(build或release)。设置完成后,无需修改.pro文件,只需选择您的套件、构建配置,运行qmake,然后重新构建。
我不知道CONFIG+=Desktop(例如)数据存储在哪里,但我会猜测在.pro.user文件中。因此,如果有人.pro从存储库中提取您的文件,他们可能必须至少以这种方式初始配置项目一次,但之后不能(只要.pro.user文件存在)。QT 真的应该有一个简单的机制来做到这一点,尤其是因为它们的卖点之一是多平台集成。如果有更好的方法来做到这一点,我还没有在 SO 或 QT 文档中看到它。