Qt设置根据编译器不同链接不同的lib库

我们知道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就够用了。

你可能感兴趣的:(c++,qt,qt)