一、简介
既上一篇 [cmake 入门教程] (https://blog.csdn.net/weixin_43842397/article/details/135863834)
上篇主要介绍如何快速编写一个简单 的 cmake 工程。
本次主要介绍如何 搭建一个复杂的 cmake工程 以及使用到的相关函数
二、cmake 常见属性
1、目标属性:
INCLUDE_DIRECTORIES:设置包含头文件的目录。
COMPILE_DEFINITIONS:定义编译时使用的宏。
COMPILE_OPTIONS:指定编译选项。
LINK_LIBRARIES:指定链接到目标的库文件。
AUTOMOC, AUTOUIC, AUTOGEN_SOURCE_GROUP 等属性用于处理 Qt 的自动代码生成。
2、输出目录属性:
LIBRARY_OUTPUT_DIRECTORY:指定库文件(动态库)的输出目录。
RUNTIME_OUTPUT_DIRECTORY:指定可执行文件的输出目录。
ARCHIVE_OUTPUT_DIRECTORY:指定存档文件(静态库)的输出目录。
3、文件属性:
SOURCE_GROUP:将源文件组织成逻辑组,用于在 IDE 中显示文件结构。
HEADER_FILE_ONLY:标记目标只包含头文件,不需要编译。
GENERATED:标记目标为由 CMake 自动生成的文件。
其他属性:
4、其他属性:
CXX_STANDARD、C_STANDARD:指定 C++ 和 C 标准版本。
FOLDER:设置在 IDE 中的组织结构中的目标所属的文件夹名称。
VERSION:指定目标的版本号。
三、cmake 相关函数详解
1、set_target_properties
set_target_properties 是 CMake 中用于设置特定目标属性的命令。
它允许您自定义构建过程中的目标(例如可执行文件、库文件)的各种属性
set_target_properties 的基本语法如下:
set_target_properties(target1 target2 ... PROPERTIES prop1 value1 prop2 value2 ...)
其中,target1、target2 等是要设置属性的目标名称,可以是可执行文件、库文件等。
prop1 value1 prop2 value2 是要设置的具体属性和对应的值。
还有一种方法就是直接设置相关属性,方法会在案例中用,案例中的使用就比较简单粗暴
2、message
message 是 CMake 中用于输出消息的命令。
它允许在构建过程中向终端输出自定义的文本信息,以便在构建时进行调试、提示或显示状态。
message 命令的基本语法如下:
message([<mode>] "message")
其中, 可选,指定消息的模式,可以是 STATUS、WARNING、AUTHOR_WARNING、SEND_ERROR、FATAL_ERROR 、DEPRECATION。
如果不指定模式,默认为 STATUS。
常用的模式包括:
STATUS:默认模式,输出一般的信息。
WARNING:输出警告信息。
SEND_ERROR:输出错误信息并停止构建过程。
FATAL_ERROR:输出致命错误信息并停止构建过程。
3、add_subdirectory
add_subdirectory 是 CMake 中用于将子目录添加到当前项目的命令。
它允许您在一个主要项目中包含其他项目或子模块,并在构建过程中处理这些子目录。
add_subdirectory 命令的语法如下:
add_subdirectory(subdirectory_name [binary_dir] [EXCLUDE_FROM_ALL])
其中,subdirectory_name 是要添加的子目录名称,可以是相对于当前 CMakeLists.txt 文件的路径。
binary_dir 是可选的二进制目录名称,用于指定生成文件的输出目录。
EXCLUDE_FROM_ALL 是一个可选的参数,
当设置为 EXCLUDE_FROM_ALL 时,表示不包括该子目录的构建过程。
使用 add_subdirectory 命令后,CMake 会在指定的子目录中查找另一个 CMakeLists.txt 文件,并在该子目录中执行相应的配置和构建步骤。
4、install
install 是 CMake 中用于安装文件和目标的指令。它能够在构建项目时将生成的可执行文件、库、头文件和其他必要的文件复制到指定的目录中,以便后续部署或使用。
install 命令的语法如下:
install(TARGETS <target1> <target2> ...
DESTINATION <destination>
[ARCHIVE|LIBRARY|RUNTIME|FRAMEWORK|BUNDLE]
[PERMISSIONS permissions...]
[CONFIGURATIONS [Debug|Release|...]]
[COMPONENT <component>]
[OPTIONAL] [EXCLUDE_FROM_ALL])
常见包括:
TARGETS:需要安装的目标(可执行文件、库等)。
DESTINATION:指定安装目标的路径。
类型选项:可以指定需要安装的目标的类型,如 ARCHIVE(静态库)、LIBRARY(动态库)、RUNTIME(可执行文件)等,默认为自动检测。
PERMISSIONS:设置安装目标的权限。
CONFIGURATIONS:根据构建配置(Debug、Release 等)选择性地安装目标。
COMPONENT:指定组件,用于对安装目标进行分类。
OPTIONAL:如果目标不存在,则忽略安装操作。
EXCLUDE_FROM_ALL:将该安装操作从默认构建中排除。
四、工程例子
工程会有一个统一的入口负责编译整个项目,无需每个模块单独编译
工程无需积分即可下载。
工程链接:
https://download.csdn.net/download/weixin_43842397/88802883