一、识别编译器
win32-msvc*{DEFINES += COMPILE_MSVC}else{win32-g++{DEFINES += COMPILE_MINGW32DEFINES += PJ_AUTOCONF=1DEFINES += PJ_IS_BIG_ENDIAN=0DEFINES += PJ_IS_LITTLE_ENDIAN=1}else{DEFINES += COMPILE_LINUXif(contains(QMAKE_CXX,g++)){DEFINES += COMPILE_UBUNTU}if(contains(QMAKE_CXX,aarch64-linux-gnu-g++)){DEFINES += COMPILE_KYLIN}}}
对于win32-msvc以及win32-g++
QT会在编译的时候将这个选项加入,在pro文件中可以直接拿来识别
(资料图片仅供参考)
在linux下可以直接通过查看编译器
contains(QMAKE_CXX,g++) //X86_64平台
contains(QMAKE_CXX,aarch64-linux-gnu-g++) //aarch64平台(飞腾加银河麒麟),因为是交叉编译所以QMAKE是用aarch64-linux-gnu-g++编译出来的
这样就能精确的知道在哪个平台哪个编译器
二、条件编译
其中DEFINES += COMPILE_MSVC
DEFINES += COMPILE_MINGW32
DEFINES += COMPILE_LINUX
DEFINES += COMPILE_KYLIN
在pro中使用DEFINES来实现条件编译
Qt的pro文件中使用DEFINES 来实现类似gcc -D的条件编译功能。
在生成的makefile中,可以看到编译宏
DEFINES = ... -COMPILE_MSVC...CXXFLAGS = ... $(DEFINES) ......
在整个工程中都可以使用这些宏
#if defined(COMPILE_MSVC)#else#include \"play_mp4.h\"#include \"CLog_c.h\"#endif
#if defined(COMPILE_MSVC)m_mediaPlayer = new QMediaPlayer(this, QMediaPlayer::VideoSurface);connect(m_mediaPlayer, SIGNAL(durationChanged(qint64)), this,SLOT(durationChanged(qint64)));#endif
使用这种宏可以在程序中进行条件编译
三、
win32-msvc*{DESTDIR += $PWD/../build/msvc/run}else{win32-g++{DESTDIR += $PWD/../build/mingw32/run}else{if(contains(QMAKE_CXX,g++)){DESTDIR += $PWD/../build/ubuntu/bin}if(contains(QMAKE_CXX,aarch64-linux-gnu-g++)){DESTDIR += $PWD/../build/aarch64/bin}}}
DESTDIR 是一个目标程序的生成目录,最终的目标文件生成后会存放到这个路径下
pro文件加入下面这句
DEFINES += KJorLJ=0
if(KJorLJ == 1)ui->pushButton_2->setStyleSheet(\"background-color: rgb(6, 60, 132); color: rgb(255, 255, 255);\");elseui->pushButton_2->setStyleSheet(\"background-color:rgb(6, 91, 50);color:rgb(255, 255, 255);\");
可以实现不同的功能
所以DEFINES 就是在pro文件中定义的宏,这个宏是一个全局的,程序中也可使用
#if defined(ARM_ARCH) //如果是在开发板上运行,那么需要隐藏鼠标指针QApplication::setOverrideCursor(Qt::BlankCursor); // 隐藏鼠标#endif
【领 QT开发教程 学习资料, 点击下方链接莬费领取↓↓ ,先码住不迷路~】
点击这里: