CMake 完整入门教程(四)

本文详细介绍了如何使用CMake识别MinGW环境并配置资源编译器,包括启用RC语言、设置编译命令以及将.rc文件添加到可执行文件或库中,以确保在Windows平台上正确编译应用。
摘要由CSDN通过智能技术生成
11 CMake 常用变量 英文版的全部列表在这里: http://www.cmake.org/Wiki/CMake_Useful_Variables
11.1 CMake 系统信息
以下皆为字串类型
CMAKE_SYSTEM
系统全名,如 "Linux-2.4.22" "FreeBSD-5.4-RELEASE" "Windows 5.1"
CMAKE_SYSTEM_NAME
系统名称,如 "Linux" "FreeBSD" or "Windows"
CMAKE_SYSTEM_VERSION
只有 CMAKE_SYSTEM 当中版本的部分
CMAKE_SYSTEM_PROCESSOR
CPU 名称,如 "Intel(R) Pentium(R) M processor 2.00GHz"
CMAKE_GENERATOR
在命令列所指定的 Generator 名称
11.2 系统旗标
以下皆为 BOOL 类型,若是与目前所属的操作系统 / 编译器相符,其值为 True ,否则为
False
UNIX
如果为真,表示为 UNIX-like 的系统,包括 Apple OS X CygWin
WIN3
如果为真,表示为 Windows 系统,包括 CygWin
MINGW CYGWIN MSYS 亦为 True
APPLE
如果为真,表示为 Apple 系统 MINGW
MSYS
CYGWIN
BORLAND
WATCOM
MSVC MSVC_IDE CMAKE_COMPILER_2005 MSVC60 MSVC70 MSVC71
MSVC80 MSVC90 MSVC10
不同版本的微软 Visual C++ 专案档
CMAKE_COMPILER_IS_GNUCC
目前使用 GNU C 编译器
CMAKE_COMPILER_IS_GNUCXX
目前使用 GNU C++ 编译器
CMAKE_SIZEOF_VOID_P
表示 void* 的大小(例如为 4 或者 8 ),可以使用其来判断当前构建为 32 位还是 64
11.3 资料夹和档案信息
CMAKE_SOURCE_DIR
内容为 source tree 根目录的完整路径,也就是 CMake 开始建置过程的进入点。
CMAKE_BINARY_DIR
内容为 binary tree 根目录的完整路径,在 in-source build 的时候值与 CMAKE_SOURCE_DIR
相同。
PROJECT_SOURCE_DIR
目前正在处理中的专案最上层目录,即内含 project() 指令的 CMakeLists 所在资料夹。
PROJECT_BINARY_DIR 目前所属专案的建置根目录。在 in-source build 时和 PROJECT_SOURCE_DIR 相同。
CMAKE_CURRENT_SOURCE_DIR
目前正在处理的 CMakeLists.txt 所在位置。
CMAKE_CURRENT_BINARY_DIR
目前正在处理的 CMakeLists.txt 对应的建置资料夹位置。在 in-source build 时和
CMAKE_CURRENT_SOURCE_DIR 相同。
CMAKE_CURRENT_LIST_DIR
表示正在处理的 CMakeLists.txt 文件的所在的目录的绝对路径( 2.8.3 以及以后版本才支
持)
CMAKE_ARCHIVE_OUTPUT_DIRECTORY
用于设置 ARCHIVE 目标的输出路径
CMAKE_LIBRARY_OUTPUT_DIRECTORY
用于设置 LIBRARY 目标的输出路径
CMAKE_RUNTIME_OUTPUT_DIRECTORY
用于设置 RUNTIME 目标的输出路径
11.4 编译选项
BUILD_SHARED_LIBS
将所有程式库 target 设成共享程式库,只对未指定类型的程式库有效。
CMAKE_BUILD_TYPE
控制建置类型,值可为下列之一 :
None: 编译器默认值
Debug: 产生除错信息
Release: 进行最佳化
RelWithDebInfo: 进行最佳化,但仍然会启用 DEBUG flag
MinSizeRel: 进行程式码最小化
特别要注意的是, CMAKE_BUILD_TYPE configuration time 不会自动初始化为可读取的变
量,必须要在使用者指定建置类型后才可以利用。
C 编译标志相关变量
CMAKE_C_FLAGS
CMAKE_C_FLAGS_[DEBUG|RELEASE|MINSIZEREL|RELWITHDEBINFO]
是在呼叫 C 编译器时附加的额外选项。其中:
CMAKE_C_FLAGS CMAKE_CXX_FLAGS 可以指定编译标志
CMAKE_C_FLAGS_[DEBUG|RELEASE|MINSIZEREL|RELWITHDEBINFO]
CMAKE_CXX_FLAGS_[DEBUG|RELEASE|MINSIZEREL|RELWITHDEBINFO] 则指定特定构建类型
的编译标志,这些编译标志将被加入到 CMAKE_C_FLAGS CMAKE_CXX_FLAGS 中去,例
如,如果构建类型为 DEBUG ,那么 CMAKE_CXX_FLAGS_DEBUG 将被加入到
CMAKE_CXX_FLAGS 中去。
C++ 编译标志相关变量
CMAKE_CXX_FLAGS
CMAKE_CXX_FLAGS_DEBUG
CMAKE_CXX_FLAGS_RELEASE
CMAKE_CXX_FLAGS_RELWITHDEBINFO
同上,但作用在 C++ 编译器 。
链接标志相关变量
CMAKE_EXE_LINKER_FLAGS
CMAKE_EXE_LINKER_FLAGS_[DEBUG|RELEASE|MINSIZEREL|RELWITHDEBINFO]
CMAKE_MODULE_LINKER_FLAGS
CMAKE_MODULE_LINKER_FLAGS_[DEBUG|RELEASE|MINSIZEREL|RELWITHDEBINFO]
CMAKE_SHARED_LINKER_FLAGS
CMAKE_SHARED_LINKER_FLAGS_[DEBUG|RELEASE|MINSIZEREL|RELWITHDEBINFO] 它们类似于编译标志相关变量。如 CMAKE_EXE_LINKER_FLAGS 是生成执行档时所使用的连
结选项。 CMAKE_SHARED_LINKER_FLAGS 是生成 shared library 时所使用的连结选项。
12 自定义编程语言
在默认的情况下 CMake 会启用 C C++ 两种编程语言, CMake 内建了几种常见 C C++
译器的相关知识,通常我们不需要费心思去操心编译细节。如果是 CMake 不认得的编程语
言或编译器,就需要指定相关的编译规则。
举个具体的例子,撰写 Win32 程式时常用到 Windows Resource 语言,必须将 .rc 档案编译
.res 档,再和其他 C C++ .obj 连结成最后的程式。在 Visual C++ 这并不会造成任何困
扰,只要把 .rc 档当成一般的源代码一起给 add_executable() 等指令, Visual C++ 的统一
编译窗口 cl.exe 会自动处理,不劳您费心。然而其它的编译器未必有如此贴心的服务,例
MinGW gcc 就不会主动呼叫 windres 来编译资源档,我们必须手动指定。
利用 enable_language() 可以启用一个编程语言,通常还必须要设定几个变量告诉 CMake
个语言的编译器名称、源代码附档名、输出档附档名、命令列格式等等。由于 CMake
resource file 已经有部分的知识,我们只要设定编译器名称和用法即可。
if(MINGW)  
  set(CMAKE_RC_COMPILER_INIT windres)  
  enable_language(RC)  
  set(CMAKE_RC_COMPILE_OBJECT  
    "<CMAKE_RC_COMPILER> <FLAGS> -O coff <DEFINES> -i <SOURCE> -o <OBJECT>")  
endif()
然后将 .rc 档当成一般的源代码加到 add_executable() add_library() 之中, CMake 就会自
动辨识 .rc 档并且用上面 CMAKE_RC_COMPILE_OBJECT 给定的命令列格式编译。
  1. 识别MinGW环境

if(MINGW)

这一行检查是否正在使用MinGW编译器。MinGW是一个用于编译Windows应用程序的GCC工具集。
2. 设置资源编译器

set(CMAKE_RC_COMPILER_INIT windres)

这行指定用于编译资源文件的编译器为windreswindres是MinGW的一部分,用于将.rc文件编译为.o对象文件。
3. 启用RC语言

enable_language(RC)

这行告诉CMake启用RC语言。这意味着CMake知道如何处理.rc文件。
4. 设置资源编译命令

set(CMAKE_RC_COMPILE_OBJECT
"<CMAKE_RC_COMPILER> <FLAGS> -O coff <DEFINES> -i <SOURCE> -o <OBJECT>")

这里定义了如何编译一个.rc源文件。具体来说,它指定了如何使用windres编译器来编译资源文件。例如,它指定了输出格式为coff(Common Object File Format),这是Windows可执行文件的标准格式。
5. 添加.rc文件到可执行文件或库中
一旦您设置了CMake以识别和处理.rc文件,您可以将这些文件视为常规的源代码文件,并将其添加到add_executable()add_library()中。CMake会自动知道如何处理这些文件,并使用上面定义的命令进行编译

CMake是一个跨平台的开源构建工具,它能够自动生成各种不同平台的构建脚本,简化了项目的构建过程。下面是一个300字快速入门CMake的实战教程。 首先,安装CMake并确保它被正确添加到系统的环境变量中。 接下来,在你的项目根目录下创建一个CMakeLists.txt文件,这个文件是CMake的配置文件,用来指导CMake生成项目的构建脚本。在CMakeLists.txt文件中,首先指定项目的名称和最低版本要求,例如: ``` cmake_minimum_required(VERSION 3.10) project(MyProject) ``` 然后,添加你的项目的源文件和头文件,使用add_executable或add_library命令指定它们的路径,例如: ``` add_executable(MyApp main.cpp foo.cpp bar.cpp) ``` 接下来,你可以添加依赖库,使用target_link_libraries命令指定它们的路径,例如: ``` target_link_libraries(MyApp ${CMAKE_DL_LIBS}) ``` 此外,你还可以指定编译选项,例如: ``` set(CMAKE_CXX_FLAGS "-std=c++11 -Wall") ``` 最后,你可以通过命令行执行cmake命令来生成构建脚本,并执行构建过程,例如: ``` mkdir build cd build cmake .. make ``` 在build目录中,你会找到生成的构建脚本及其生成的可执行文件(或库文件)。 通过这个简单的实战教程,你可以快速入门CMake,并且开始使用它来管理你的项目的构建过程。当然,在实际应用中,你还可以进行更多高级配置,例如添加条件编译、安装目标等。希望这个简短的回答能够给你一个基本的CMake入门指导。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Coder_Boy_

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值