QT中如何识别编译器和实现条件编译以及设定目标文件生成路径
contains(QMAKE_CXX,aarch64-linux-gnu-g++) //aarch64平台(飞腾加银河麒麟),因为是交叉编译所以QMAKE是用aarch64-linux-gnu-g++编译出来的。所以DEFINES 就是在pro文件中定义的宏,这个宏是一个全局的,程序中也可使用。Qt的pro文件中使用DEFINES 来实现类似gcc -D的条件编译功能。QT会在编译的时候将这个选项
一、识别编译器
win32-msvc*{
DEFINES += COMPILE_MSVC
}else{
win32-g++{
DEFINES += COMPILE_MINGW32
DEFINES += PJ_AUTOCONF=1
DEFINES += PJ_IS_BIG_ENDIAN=0
DEFINES += PJ_IS_LITTLE_ENDIAN=1
}else{
DEFINES += COMPILE_LINUX
if(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);");
else
ui->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
更多推荐
所有评论(0)