CMakeLists.txt语法规则:部分常用命令说明二

本文详细介绍了CMakeLists.txt中的aux_source_directory命令用于查找源文件,include_directories设置头文件搜索路径,以及get_target_property和set_target_properties的作用。通过实例演示了这些命令的使用及其对工程构建的影响。

一.  简介

前一篇文章学习了CMakeLists.txt语法中 add_executable命令,add_library命令,add_subdirectory 命令的简单使用。文章如下:

CMakeLists.txt语法规则:部分常用命令说明一-CSDN博客

本文继续学习 CMakeLists.txt语法中部分常用命令。

二. CMakeLists.txt语法规则:部分常用命令

1. aux_source_directory

aux_source_directory 命令会查找目录中的所有源文件,其命令定义如下:

aux_source_directory(<dir> <variable>)
从指定的目录中查找所有源文件,并将扫描到的源文件路径信息存放到 <variable> 变量中,譬如目录结构如下:
CMakeCache.txt 内容如下所示:
# 顶层 CMakeLists.txt
cmake_minimum_required("VERSION" "3.5")
project("HELLO")
# 查找 src 目录下的所有源文件
aux_source_directory(src SRC_LIST)
message("${SRC_LIST}") # 打印 SRC_LIST 变量
进入到 build 目录下,执行 cmake ..
### CMakeLists.txt 文件的基本结构和常用命令 CMakeLists.txt 是 CMake 构建系统的核心配置文件,采用命令式语法组织项目结构和编译流程。每个 CMake 项目通常都有一个或多个 CMakeLists.txt 文件,用于定义项目的构建规则、依赖关系、编译选项等 [^1]。 #### 基本结构 CMakeLists.txt 文件通常遵循以下结构: 1. **定义最低版本要求** 2. **指定项目名称** 3. **设置编译目标(可执行文件或库)** 4. **配置编译选项(如头文件路径、依赖库等)** 5. **构建输出控制** 示例基本结构: ```cmake cmake_minimum_required(VERSION 3.10) project(MyProject) add_executable(MyApp main.cpp) ``` #### 常用命令说明 - **`cmake_minimum_required(VERSION x.x.x)`** 指定项目所需的最低 CMake 版本,确保构建环境兼容性 [^1]。 示例: ```cmake cmake_minimum_required(VERSION 3.5) ``` - **`project(ProjectName)`** 定义项目名称,同时会自动创建两个变量 `ProjectName_BINARY_DIR` 和 `ProjectName_SOURCE_DIR`,分别表示构建目录和源码目录 [^1]。 示例: ```cmake project(MyApplication) ``` - **`add_executable(TargetName source1 source2 ...)`** 定义一个可执行文件目标,并指定其源文件 [^3]。 示例: ```cmake add_executable(hello main.cpp) ``` - **`add_library(TargetName [STATIC | SHARED | MODULE] source1 source2 ...)`** 定义一个库目标,可以是静态库(STATIC)、共享库(SHARED)或模块库(MODULE) [^3]。 示例: ```cmake add_library(mylib STATIC utils.cpp) ``` - **`aux_source_directory(DirectoryName VariableName)`** 将指定目录下的所有源文件路径存入一个变量,便于后续使用 [^3]。 示例: ```cmake aux_source_directory(src SRC_LIST) add_executable(myapp ${SRC_LIST}) ``` - **`include_directories(Directory1 Directory2 ...)`** 添加头文件搜索路径,使得编译器可以找到项目所需的头文件 [^4]。 示例: ```cmake include_directories(include) ``` - **`add_subdirectory(SourceDirectory [BinaryDirectory] [EXCLUDE_FROM_ALL])`** 添加一个子目录作为构建单元,该目录中也应包含 CMakeLists.txt 文件 [^4]。 示例: ```cmake add_subdirectory(src) ``` - **`target_include_directories(Target PUBLIC|PRIVATE|INTERFACE IncludeDirectories)`** 为特定目标设置包含目录,相比 `include_directories` 更加细粒度控制 [^2]。 示例: ```cmake target_include_directories(myapp PUBLIC include) ``` - **`target_link_libraries(Target [PRIVATE|PUBLIC|INTERFACE] Lib1 Lib2 ...)`** 指定目标需要链接的库 [^2]。 示例: ```cmake target_link_libraries(myapp PRIVATE mylib) ``` - **`set(Variable Value [CACHE TYPE DOCSTRING [FORCE]])`** 设置变量值,用于存储路径、选项或编译参数 [^2]。 示例: ```cmake set(SRC_LIST main.cpp utils.cpp) ``` - **`option(OptionName "Description" ON|OFF)`** 定义一个可选的布尔型配置选项,用于控制构建行为 。 示例: ```cmake option(USE_DEBUG "Enable debug mode" OFF) ``` #### 多层项目结构示例 顶层 CMakeLists.txt: ```cmake cmake_minimum_required(VERSION 3.5) project(HELLO) include_directories(include) add_subdirectory(src) ``` src 目录下的 CMakeLists.txt: ```cmake add_executable(hello main.c) ``` 该结构中,`include_directories(include)` 指令设置的头文件路径会通过 `add_subdirectory` 传递给子目录中的 CMakeLists.txt [^4]。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值