QtCreator里区分编译器类型、位数、实现条件编译(cpp里)

举报
DS小龙哥 发表于 2022/02/28 09:47:36 2022/02/28
【摘要】 QT本身具备跨平台特性,所以平时开发项目的时候,经常遇到一份项目需要在不同的系统、平台上编译运行;每个平台上使用的编译器位数、类型都有区别,在项目里经常遇到有些头文件或者变量需要在特定的系统下才能加入

theme: geek-black
highlight: vs2015

这是我参与11月更文挑战的第16天,活动详情查看:2021最后一次更文挑战

一、前言

QT本身具备跨平台特性,所以平时开发项目的时候,经常遇到一份项目需要在不同的系统、平台上编译运行;每个平台上使用的编译器位数、类型都有区别,在项目里经常遇到有些头文件或者变量需要在特定的系统下才能加入编译,这时候如果代码里能自动根据当前选择的编译器来区分编译哪些代码,这样项目维护就方便很多。

QT在pro项目文件、.cpp源文件了都支持区分编译器、系统等操作,QT内部定义了编译器、系统的宏,通过这些宏就可以很方便的判断。

二、编译器类型区分

下面介绍QT里常用的一些定义编译器的宏:

打开帮助页面,选择索引方式搜索,然后输入: Q_ 就会看到下面出现了一堆宏定义。
image.png

往下翻就看到 Q_CC_GNU Q_CC_MSVC 等字样。 这些就是编译器的宏,分别是minGW(windows),MSVC编译器。
image.png

选择Q_CC_MSVC 点击进去,就可以看到定义的页面,并且有很多宏,还配有详细说明。


Q_CC_BOR
Defined if the application is compiled using Borland/Turbo C++.

Q_CC_CDS
Defined if the application is compiled using Reliant C++.

Q_CC_CLANG
Defined if the application is compiled using Clang.

Q_CC_COMEAU
Defined if the application is compiled using Comeau C++.

Q_CC_DEC
Defined if the application is compiled using DEC C++.

Q_CC_EDG
Defined if the application is compiled using Edison Design Group C++.

Q_CC_GHS
Defined if the application is compiled using Green Hills Optimizing C++ Compilers.

Q_CC_GNU
定义应用程序是否使用GNU C++编译。

Q_CC_HIGHC
Defined if the application is compiled using MetaWare High C/C++.

Q_CC_HPACC
Defined if the application is compiled using HP aC++.

Q_CC_INTEL
Defined if the application is compiled using Intel C++ for Linux, Intel C++ for Windows.

Q_CC_KAI
Defined if the application is compiled using KAI C++.

Q_CC_MIPS
Defined if the application is compiled using MIPSpro C++.

Q_CC_MSVC
定义应用程序是使用微软Visual C/C++,英特尔C++为Windows编译的。

Q_CC_OC
Defined if the application is compiled using CenterLine C++.

Q_CC_PGI
Defined if the application is compiled using Portland Group C++.

Q_CC_SUN
Defined if the application is compiled using Forte Developer, or Sun Studio C++.

Q_CC_SYM
Defined if the application is compiled using Digital Mars C/C++ (used to be Symantec C++).

Q_CC_USLC
Defined if the application is compiled using SCO OUDK and UDK.

Q_CC_WAT
Defined if the application is compiled using Watcom C++.

在代码里使用示例:

image.png

image.png

三、区分操作系统的宏

下面列出的是操作系统定义宏,可以在代码里区分当前的操作系统:

Q_OS_AIX
Defined on AIX.

Q_OS_ANDROID
Defined on Android.  这是安卓系统

Q_OS_BSD4
Defined on Any BSD 4.4 system.

Q_OS_CYGWIN
Defined on Cygwin.

Q_OS_DARWIN
Defined on Darwin-based operating systems such as macOS, iOS, watchOS, and tvOS.

Q_OS_FREEBSD
Defined on FreeBSD.

Q_OS_HPUX
Defined on HP-UX.

Q_OS_HURD
Defined on GNU Hurd.

Q_OS_IOS
Defined on iOS.  这是IOS系统

Q_OS_LINUX
Defined on Linux.  这是Linux系统

Q_OS_LYNX
Defined on LynxOS.

Q_OS_MAC
Deprecated synonym for Q_OS_DARWIN. Do not use.

Q_OS_MACOS
Defined on macOS.

Q_OS_NETBSD
Defined on NetBSD.

Q_OS_OPENBSD
Defined on OpenBSD.

Q_OS_OSX
Deprecated synonym for Q_OS_MACOS. Do not use.

Q_OS_QNX
Defined on QNX Neutrino.

Q_OS_SOLARIS
Defined on Sun Solaris.

Q_OS_TVOS
Defined on tvOS.

Q_OS_UNIX
Defined on Any UNIX BSD/SYSV system.

Q_OS_WATCHOS
Defined on watchOS.

Q_OS_WIN32
Defined on 32-bit and 64-bit versions of Windows.

Q_OS_WIN64
Defined on 64-bit versions of Windows.

Q_OS_WIN
Defined on all supported versions of Windows. That is, if Q_OS_WIN32, 
Q_OS_WIN64, or Q_OS_WINRT is defined.

Q_OS_WINDOWS
This is a synonym for Q_OS_WIN.

Q_OS_WINRT
Defined for Windows Runtime (Windows Store apps) on Windows 8, Windows RT, and Windows Phone 8.

代码使用示例

image.png

#ifdef Q_OS_WIN64
QString compiler="当前编译器是windows下64位";
#endif

#ifdef Q_OS_WIN32
QString compiler="当前编译器是windows下32位";
#endif

#ifdef Q_OS_LINUX
QString compiler="当前是Linux系统";
#endif

#ifdef Q_OS_ANDROID
QString compiler="当前是android系统";
#endif
【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。