我们知道Qt的pro工程文件中可以编写编译条件,根据不同的条件生成不同的编译指令,常用的是根据系统的不同包含不同的源文件,如
win32 {
HEADERS += windows.h
}
linux {
HEADERS += linux.h
}
除了源文件,链接的lib文件也需要在pro中指定,而在windows平台中,可选的编译器有msvc和mingw两种,且这两种编译器的库文件不能通用,那么我们怎么在pro文件中根据编译器的不同包含不同的lib库文件呢,pro文件中我们可以通过CONFIG+=的形式定义自己的条件,如增加
CONFIG += mingw-cc
我们就可以像用这个来做判断
mingw-cc {
LIBS += -Lmingw -ltest
} else {
LIBS += -Lvs -ltest
}
这样就可以连接不同的lib库文件了,但是需要手动更改CONFIG设置,那么Qt有没有内置的表示当前编译器类型的CONFIG变量呢,网上没找到完整的qmake或pro文件的说明文档,我们怎么才能知道CONFIG的预定义值都有啥呢?
我们知道pro中可以通过$${var}的形式引用预定义变量,而pro文件最终会通过qmake编译成makefile文件,这个makefile的内容是会落盘的,是我们能看见的,那么我们增加如下定义
DEFINES += Q_CONFIG=$${CONFIG}
编译一下,看生成的makefile中DEFINES的值,找到Q_CONFIG的定义如下
-DQ_CONFIG=lex yacc debug exceptions depend_includepath testcase_targets import_plugins import_qpa_plugin windows file_copies qmake_use qt warn_on release link_prl debug_and_release debug_and_release_target precompile_header shared release no_plugin_manifest win32 mingw gcc copy_dir_files debug DebugBuild Debug build_pass debug qml_debug debug DebugBuild Debug build_pass
等号后面就是CONFIG的默认值了,我们发现其中有mingw和gcc的定义,那么我们就可以直接通过mingw和gcc来判断编译器类型了,不用自己定义了
mingw {
LIBS += -Lmingw -ltest
} else {
LIBS += -Lvs -ltest
}
换成msvc版的qt应该有msvc的预定义值,值的具体是啥我就不看了,还得换Qt版本,有mingw和gcc就够用了。