【CMake保姆级教程】搜索文件和包含头文件

您所在的位置:网站首页 如何使用相对路径查找文件夹 【CMake保姆级教程】搜索文件和包含头文件

【CMake保姆级教程】搜索文件和包含头文件

2024-07-12 01:38| 来源: 网络整理| 查看: 265

文章目录 前言一、搜索文件1.1 为什么需要他1.2 搜索方式11.3 搜索方法2 二、包含头文件2.1 为什么需要他?2.2 包含头文件本质include_directories: 总结

前言

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目录下搜索到的源文件列表存储到该变量中

那么上面这个文件夹层级我们就可以像下面这样写:

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的各项功能,发掘更多构建和管理项目的技巧,提升你的开发体验。



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3