2015-05-19 127 views
1

我有一个QMAKE(QT 4.8.6).pro文件,我需要添加一个基于编译套件条件表达式:Qt中使用条件表达式套件qmake的

我现在有2套组(不同的编译器),其中一个用于桌面,另一个用于嵌入式平台,我的应用程序链接到一些库,这两个库在两个不同的文件夹中同时针对Desktop和Embedded编译。

所以想什么,我实现的是:

unix { embedded-platform { LIBS+= -lonearm -ltwoarm etc... }} 
unix { desktop { LIBS += -lonex86 -ltwox86 etc... }} 

我仔细阅读文档,但我无法弄清楚如何知道正在修建什么试剂盒从里面的.pro 。

我已经尝试过这里提出的解决方案https://forum.qt.io/topic/52954/solved-qmake-how-to-achieve-kit-detection-and-automatic-conditional-linking/3,但它不能解决我的问题,因为没有办法在同一平台上区分自定义套件(两个编译器是g ++和arm-linux-gnueabihf-g ++)。

有什么建议吗?

+0

http://stackoverflow.com/a/3056901/999943 – phyatt

+0

@phyatt这是从我的链接相同的解决方案发布......它似乎不区分不同的linux-g ++之间(如在这种情况下) –

回答

1

你也应该能够基于编译器进行切换。要使用的关键字在mkspecs文件夹中列出。

望着mkspecs我的电脑了Qt 5.4套件之一,它有以下文件夹:

aix-g++ 
aix-g++-64 
aix-xlc 
aix-xlc-64 
android-g++ 
blackberry-armle-v7-qcc 
blackberry-armv7le-qcc 
blackberry-x86-qcc 
common 
common/aix 
common/android 
common/c89 
common/ios 
common/ios/GLES2 
common/mac 
common/nacl 
common/posix 
common/qnx 
common/wince 
common/winrt_winphone 
common/winrt_winphone/assets 
common/winrt_winphone/manifests 
common/winrt_winphone/manifests/8.0 
common/winrt_winphone/manifests/8.1 
common/winrt_winphone/manifests/8.1_wp 
cygwin-g++ 
darwin-g++ 
devices 
devices/blackberry-playbook-armle-v7-qcc 
devices/blackberry-playbook-armv7le-qcc 
devices/blackberry-playbook-x86-qcc 
devices/common 
devices/linux-archos-gen8-g++ 
devices/linux-arm-amlogic-8726M-g++ 
devices/linux-arm-hisilicon-hix5hd2-g++ 
devices/linux-arm-trident-pnx8473-g++ 
devices/linux-beagleboard-g++ 
devices/linux-imx53qsb-g++ 
devices/linux-imx6-g++ 
devices/linux-mipsel-broadcom-97425-g++ 
devices/linux-rasp-pi-g++ 
devices/linux-sh4-stmicro-ST7108-g++ 
devices/linux-sh4-stmicro-ST7540-g++ 
devices/linux-snowball-g++ 
devices/linux-tegra2-g++ 
features 
features/android 
features/data 
features/data/android 
features/data/cmake 
features/data/headersclean 
features/mac 
features/qpa 
features/unix 
features/win32 
features/winrt 
freebsd-g++ 
freebsd-g++46 
freebsd-icc 
hpux-acc 
hpux-acc-64 
hpux-acc-o64 
hpux-g++ 
hpux-g++-64 
hpuxi-acc-32 
hpuxi-acc-64 
hpuxi-g++-64 
hurd-g++ 
irix-cc 
irix-cc-64 
irix-g++ 
irix-g++-64 
linux-arm-gnueabi-g++ 
linux-clang 
linux-clang-libc++ 
linux-cxx 
linux-g++ 
linux-g++-32 
linux-g++-64 
linux-icc 
linux-icc-32 
linux-icc-64 
linux-kcc 
linux-llvm 
linux-lsb-g++ 
linux-pgcc 
lynxos-g++ 
macx-clang 
macx-clang-32 
macx-g++ 
macx-g++-32 
macx-g++40 
macx-g++42 
macx-icc 
macx-ios-clang 
macx-ios-clang/features 
macx-llvm 
macx-xcode 
modules 
netbsd-g++ 
openbsd-g++ 
qnx-armle-v7-qcc 
qnx-armv7le-qcc 
qnx-x86-qcc 
sco-cc 
sco-g++ 
solaris-cc 
solaris-cc-64 
solaris-cc-64-stlport 
solaris-cc-stlport 
solaris-g++ 
solaris-g++-64 
tru64-cxx 
tru64-g++ 
unixware-cc 
unixware-g++ 
unsupported 
unsupported/android-g++ 
unsupported/freebsd-clang 
unsupported/integrity-ghs 
unsupported/linux-armcc 
unsupported/linux-host-g++ 
unsupported/linux-scratchbox2-g++ 
unsupported/nacl-g++ 
unsupported/nacl64-g++ 
unsupported/qnx-X11-g++ 
unsupported/vxworks-ppc-dcc 
unsupported/vxworks-ppc-g++ 
unsupported/vxworks-simpentium-dcc 
unsupported/vxworks-simpentium-g++ 
unsupported/win32-msvc2003 
win32-g++ 
win32-icc 
win32-msvc2005 
win32-msvc2008 
win32-msvc2010 
win32-msvc2012 
win32-msvc2013 
wince60standard-armv4i-msvc2005 
wince60standard-x86-msvc2005 
wince70embedded-armv4i-msvc2008 
wince70embedded-x86-msvc2008 
winphone-arm-msvc2012 
winphone-arm-msvc2013 
winphone-x86-msvc2012 
winphone-x86-msvc2013 
winrt-arm-msvc2012 
winrt-arm-msvc2013 
winrt-x64-msvc2012 
winrt-x64-msvc2013 
winrt-x86-msvc2012 
winrt-x86-msvc2013 

希望有所帮助。

+0

但我应该手动添加一个新的mkspec到基于我在Qt Creator中创建的工具包的mkspecs文件夹?到目前为止,我找不到与我的套件有关的任何东西... –

+0

我之前没有构建过定制套件,所以我不能说。在定制套件的构建输出中,它是否生成了mkspecs文件夹?如果需要,你可以将它与其他mkspecs文件夹合并。 – phyatt

0

我没有足够的声望评论phyatts答案,这基本上是正确的。 为了调试的目的,您可以添加

message($$QMAKESPEC) 

你的亲文件,以获得当前用于建设项目的编译器的准确名称。这给出了类似

的/ usr /共享/ QT4/mkspecs/Linux的克++

其中粗体部分是范围值。 mkspecs应与工具包一起提供,例如包含在您安装的工具链中。切换套件,以获得第二compiler.Then的名称使用行范围值与

linux-g++: { message("found g++") } 
linux-gnueabi-oe-g++: { message("found g++ embedded") }