【CMake】CMakeLists.txt速查手册

本文详细介绍了如何使用CMake构建二进制程序和动态库,包括设置变量、添加编译选项、宏定义以及链接库等步骤,是C++开发者必备的CMake实践教程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

速查命令

cmake -D xx=xx [路径] 外部添加变量

project(xxx) #关联变量 PROJECT_SOURCE_DIR PROJECT_NAME

cmake_minimum_required(VERSION 3.5) #指定cmake 版本

SET(CMAKE_INSTALL_PREFIX <install_path>) #指定install安装路径

aux_source_directory(./ SRC) #获取当前目录下所有.c .cpp .cc

set(CXX  "-CXX -Wall -pthread")
set(CMAKE_CXX_FLAGS ${CXX}) #C/C++相关编译参数

set(变量名 路径) 设置变量

add_definitions(-Dhaha) #添加编译选项 比如宏定义haha

message("sssss") #打印消息

add_subdirectory(子文件夹) #编译子文件,子文件夹中需要有CMakeLists.txt

add_library(utils SHARED/STATIC ${SRC}) #将变量SRC代表的代码编译成动态/静态 库  比如这个生成的就是 libutils.so / libutils.a  lib可以去掉不写

add_executable(utils ${SRC}) #将变量SRC代表的文件编译成二进制文件

target_include_directories(要生成的:库文件名字/二进制名字
											PRIVATE/PUBLIC ../src
) #包含源代码

target_link_libraries(要生成的:库文件名字/二进制名字 链接的库文件名字)

target_link_libraries(main utils) #将utils库,动态链接到main程序

栗子:

编译二进制

cmake_minimum_required(VERSION 3.5)
project(main)

LIST(APPEND CMAKE_CXX_FLAGS "-std=c++11 -O3 -ffast-math -Wall")

aux_source_directory(. SRC)

add_definitions(-DRUNTIME) #添加宏定义RUNTIME

add_executable(main ${SRC})
target_link_libraries(main pthread) #链接多线程库

编译动态库

cmake_minimum_required(VERSION 3.10)

aux_source_directory(. MANAGER_SRC)
add_library(MANAGER SHARED ${MANAGER_SRC})

target_link_libraries(MANAGER
	PRIVATE ../utils)


target_link_libraries(MANAGER pthread) #链接多线程库

!如有错误欢迎指正,持续更新。

### CMakeLists.txt 的基本配置与语法说明 CMake 是一种跨平台的构建工具,通过 `CMakeLists.txt` 文件定义项目结构和编译规则。以下是关于如何编写或配置 `CMakeLists.txt` 文件的具体方法及其常用语法。 #### 1. 定义项目名称 使用 `project()` 函数来指定项目的名称以及支持的语言类型。例如,在一个简单的 Hello World 工程中可以这样设置: ```cmake project(HELLO) ``` 这表示当前项目名为 HELLO[^1]。 #### 2. 添加可执行文件 通过 `add_executable()` 来声明生成的目标程序,并指明所需的源文件。如果有一个名为 `main.c` 的源文件,则可以在 `CMakeLists.txt` 中加入如下语句: ```cmake add_executable(hello main.c) ``` 此命令告诉 CMake 将 `main.c` 编译成名为 `hello` 的可执行文件。 #### 3. 构建过程中的目录管理 为了保持源码目录整洁,推荐在一个单独的子目录下完成构建操作。具体做法是在项目根路径创建一个新的文件夹(比如叫 `build`),进入该文件夹运行 CMake 和 Make 命令即可实现无污染编译环境的目的。典型的操作序列如下所示: ```bash mkdir build && cd build cmake .. make ``` 上述脚本先建立并切换到 `build` 子目录,接着调用父级目录里的 `CMakeLists.txt` 自动生成相应平台下的构建体系描述文档(如 Unix 下面就是 Makefile)。最后一步则是依据前面产生的这些中间产物实际启动整个软件包组装流水线工作流[^2][^3]。 #### 4. 更复杂的例子——多文件项目 对于稍微复杂一点的情况来说,假设我们的应用程序由多个模块构成,那么就需要分别引入它们各自的头文件位置还有库链接关系等内容项了。下面给出一段示范性的代码片段作为参考: ```cmake # 设置最低版本需求 cmake_minimum_required(VERSION 3.0) # 初始化工程名 project(MyProject LANGUAGES CXX) # 指定额外包含路径 include_directories(include) # 创建目标二进制文件 add_executable(myapp src/main.cpp src/utils.cpp) # 如果存在外部依赖则需添加此处省略部分... target_link_libraries(myapp PRIVATE some_library) ``` 以上展示了更完整的场景应用案例,其中包含了设定最小兼容版号、启用特定编程语言特性集等功能扩展点;同时还演示了怎样向编译器传递附加搜索范围参数以便于找到自定义或者第三方提供的接口定义资料所在之处;另外还涉及到了最终环节里边有关连接阶段处理逻辑方面的安排事项等等。 --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值