跳到主要内容

CMake 的使用

搜索文件

如果一个项目里边的源文件很多,在编写CMakeLists.txt文件的时候不可能将项目目录的各个文件一一罗列出来,这样太麻烦也不现实。所以,在CMake中为我们提供了搜索文件的命令,可以使用aux_source_directory命令或者file命令。

aux_source_directory 查询某路径的所有源文件

aux_source_directory(< dir > < variable >)
CMake
  • dir: 要搜索的目录
  • variable: 将从dir目录下搜索到的源文件列表存储到该变量中

注: 并不支持递归搜索, 得到的结果是追加到变量中, 而不是覆盖.

示例:

cmake_minimum_required(VERSION 3.0)
project(Test)
# set(CODE_SRC main.cpp add.cpp)
aux_source_directory(${CMAKE_CURRENT_SOURCE_DIR} CODE_SRC) # 从 cmake 命令执行指定的目录寻找所有的目标文件(不能使用 *.cpp 进行过滤)

set(CMAKE_CXX_STANDARD 17)
set(EXECUTABLE_OUTPUT_PATH ./DEBUG)
add_executable(app ${CODE_SRC})
CMake

CMAKE_CURRENT_SOURCE_DIR 宏

表示一个路径, 该路径为执行cmake指令时候指定的路径, 如:

[root@localhost build]# cmake ..
bash

此时CMAKE_CURRENT_SOURCE_DIR=..

file 搜索指定类型文件

如果一个项目里边的源文件很多,在编写CMakeLists.txt文件的时候不可能将项目目录的各个文件一一罗列出来,这样太麻烦了。所以,在CMake中为我们提供了搜索文件的命令,他就是file(当然,除了搜索以外通过 file 还可以做其他事情)。

file(GLOB/GLOB_RECURSE 变量名 要搜索的文件路径和文件类型)
CMake
  • GLOB: 将指定目录下搜索到的满足条件的所有文件名生成一个列表,并将其存储到变量中。
  • GLOB_RECURSE: 递归搜索指定目录,将搜索到的满足条件的文件名生成一个列表,并将其存储到变量中。

注: 得到的结果会覆盖原变量, 而不是追加!

因此需要使用set进行合并:

set(a ${a} ${b})
CMake

示例:

file(GLOB MAIN_SRC ${CMAKE_CURRENT_SOURCE_DIR}/src/*.cpp)
file(GLOB MAIN_HEAD ${CMAKE_CURRENT_SOURCE_DIR}/include/*.h)

# 关于要搜索的文件路径和类型可加双引号,也可不加:
file(GLOB MAIN_HEAD "${CMAKE_CURRENT_SOURCE_DIR}/src/*.h")
CMake

参考链接

[1]

爱编程的大丙-CMake 保姆级教程(上)

请作者喝奶茶:
Alipay IconQR Code
Alipay IconQR Code
本文遵循 CC CC 4.0 BY-SA 版权协议, 转载请标明出处
Loading Comments...