CMake 入门教程 Ⅱ

一、简介

既上一篇 [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

  • 7
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值