【CMake保姆级教程】搜索文件和包含头文件
@TOC
前言
CMake是一个跨平台的开源构建系统,它通过简化和自动化项目的构建过程,使软件开发变得更加容易。在CMake中,搜索文件和包含头文件是项目中必不可少的一部分。这一过程涉及到设置源文件、查找依赖项以及正确包含头文件,这对于确保项目的可维护性和可扩展性至关重要。
在这份CMake保姆级教程中,我们将深入研究如何使用CMake搜索文件和包含头文件,使你能够更有效地管理和组织你的项目。
一、搜索文件
1.1 为什么需要他
如果一个项目里边的源文件很多,在编写CMakeLists.txt文件的时候不可能将项目目录的各个文件一一罗列出来,这样太麻烦也不现实。所以,在CMake中为我们提供了搜索文件的命令,可以使用aux_source_directory命令或者file命令。
1.2 搜索方式1
例如现在的文件夹层级如下,src分为一个文件夹,那我们如果要去写源文件的路径就很麻烦,那怎么办呢:
ubuntu@ubuntu-2204:~/C/csdn-cmake$ tree -L 2
.
├── bin
│ └── app
├── build
│ ├── app
│ ├── CMakeCache.txt
│ ├── CMakeFiles
│ ├── cmake_install.cmake
│ └── Makefile
├── CMakeLists.txt
└── src
├── func.cpp
├── func.h
└── main.cpp
4 directories, 9 files
在 CMake 中使用aux_source_directory 命令可以查找某个路径下的所有源文件,命令格式为:
aux_source_directory(< dir > < variable >)
dir:要搜索的目录
variable:将从dir目录下搜索到的源文件列表存储到该变量中
那么上面这个文件夹层级我们就可以像下面这样写:
cmake_minimum_required(VERSION 3.0.0)
project(test)
set(SRC_LIST)
aux_source_directory(${CMAKE_CURRENT_SOURCE_DIR}/src SRC_LIST)
add_executable(app ${SRC_LIST})
其中CMAKE_CURRENT_SOURCE_DIR路径为CMakeLists.txt所在的路径
接下来使用cmake和make即可
ubuntu@ubuntu-2204:~/C/csdn-cmake/build$ cmake ..
-- Configuring done
-- Generating done
-- Build files have been written to: /home/ubuntu/C/csdn-cmake/build
ubuntu@ubuntu-2204:~/C/csdn-cmake/build$ make
[ 33%] Building CXX object CMakeFiles/app.dir/src/func.cpp.o
[ 66%] Building CXX object CMakeFiles/app.dir/src/main.cpp.o
[100%] Linking CXX executable app
[100%] Built target app
ubuntu@ubuntu-2204:~/C/csdn-cmake/build$
1.3 搜索方法2
如果一个项目里边的源文件很多,在编写CMakeLists.txt文件的时候不可能将项目目录的各个文件一一罗列出来,这样太麻烦了。所以,在CMake中为我们提供了搜索文件的命令,他就是file(当然,除了搜索以外通过 file 还可以做其他事情)。
file(GLOB/GLOB_RECURSE 变量名 要搜索的文件路径和文件类型)
GLOB: 将指定目录下搜索到的满足条件的所有文件名生成一个列表,并将其存储到变量中。
GLOB_RECURSE:递归搜索指定目录,将搜索到的满足条件的文件名生成一个列表,并将其存储到变量中。
注意:我们的aux_source_directory是搜索整个路径,而file需要指定文件后缀,即是文件类型
他的文件名称支持通配符
cmake_minimum_required(VERSION 3.0.0)
project(test)
set(SRC_LIST)
file(GLOB SRC_LIST ${CMAKE_CURRENT_SOURCE_DIR}/src/*.cpp)
add_executable(app ${SRC_LIST})
接下来cmake和make即可:
ubuntu@ubuntu-2204:~/C/csdn-cmake/build$ cmake ..
-- Configuring done
-- Generating done
-- Build files have been written to: /home/ubuntu/C/csdn-cmake/build
ubuntu@ubuntu-2204:~/C/csdn-cmake/build$ make
Consolidate compiler generated dependencies of target app
[ 33%] Building CXX object CMakeFiles/app.dir/src/func.cpp.o
[ 66%] Building CXX object CMakeFiles/app.dir/src/main.cpp.o
[100%] Linking CXX executable app
[100%] Built target app
二、包含头文件
2.1 为什么需要他?
如果在这样的一个文件层级结构中:
ubuntu@ubuntu-2204:~/C/csdn-cmake$ tree -L 2
.
├── bin
│ └── app
├── build
│ ├── app
│ ├── CMakeCache.txt
│ ├── CMakeFiles
│ ├── cmake_install.cmake
│ └── Makefile
├── CMakeLists.txt
├── include
│ └── func.h
└── src
├── func.cpp
└── main.cpp
5 directories, 9 files
我们的func.cpp如下图:
那么我们的头文件都放在include文件里面了,我们如果要让他不报错只能使用相对/绝对路径
但是如果文件夹一层包一层呢?那就非常的麻烦,所以我们需要包含头文件
2.2 包含头文件
本质
当我们说CMake包含头文件时,实际上是在告诉编译器在哪里可以找到项目中使用的头文件(头文件通常包含函数声明、类定义等信息)。头文件的本质含义是为编译器提供关于代码结构和接口的信息,以便在编译源文件时正确理解和处理代码。
用通俗易懂的话来解释,可以想象头文件就像是一份使用说明书,告诉编译器在哪里可以找到一些特定的功能。当你在代码中使用某个函数或类时,编译器需要知道这个函数或类的定义是什么样的,以便正确地生成代码。头文件就是这个说明书,告诉编译器在哪里能找到这些定义。
CMake帮助你指定这份说明书的位置。通过配置CMake,你告诉它哪些文件是头文件,然后编译器就能够按照这份说明书正确地处理你的代码,确保所有的函数和类都被正确识别和使用。
简而言之,CMake包含头文件的本质含义就是告诉编译器在哪里找到代码的说明书,以便编译器能够顺利地理解和处理你的代码。
include_directories:
include_directories(headpath)
使用上面这个cmake即可包含一个头文件的路径了
cmake_minimum_required(VERSION 3.0.0)
project(test)
set(SRC_LIST)
file(GLOB SRC_LIST ${CMAKE_CURRENT_SOURCE_DIR}/src/*.cpp)
include_directories(${CMAKE_CURRENT_SOURCE_DIR}/include)
add_executable(app ${SRC_LIST})
ubuntu@ubuntu-2204:~/C/csdn-cmake/build$ cmake ..
-- Configuring done
-- Generating done
-- Build files have been written to: /home/ubuntu/C/csdn-cmake/build
ubuntu@ubuntu-2204:~/C/csdn-cmake/build$ make
Consolidate compiler generated dependencies of target app
[ 33%] Building CXX object CMakeFiles/app.dir/src/func.cpp.o
[ 66%] Building CXX object CMakeFiles/app.dir/src/main.cpp.o
[100%] Linking CXX executable app
[100%] Built target app
ubuntu@ubuntu-2204:~/C/csdn-cmake/build$ ./app
Hello CMake
现在我们就已经学完了!
总结
通过本教程,我们深入了解了CMake中搜索文件和包含头文件的关键概念和技巧。学会配置源文件、查找依赖项以及正确设置头文件路径,将为你的项目提供一个坚实的基础。
CMake的强大之处在于其灵活性和可定制性。通过遵循本教程中提供的指南,你可以更加自信地配置你的项目,确保它在不同平台和环境中都能够正确地构建。
希望这份保姆级教程能够帮助你更好地利用CMake,使你的项目管理变得更加轻松和高效。继续深入学习CMake的各项功能,发掘更多构建和管理项目的技巧,提升你的开发体验。
- 点赞
- 收藏
- 关注作者
评论(0)