在CMake构建系统中,管理和编译多个源代码子目录是一项常见的需求。"CMake添加引用多个子目录多个CMakeLists同时编译"的主题旨在教你如何有效地组织项目结构,并使用CMake来处理复杂的多目录工程。下面将详细介绍如何实现这一目标。 一个CMake项目通常由一个顶级的`CMakeLists.txt`文件开始,它负责定义项目的全局属性和包含其他子目录。在顶级`CMakeLists.txt`中,你需要使用`add_subdirectory()`命令来添加子目录。这个命令告诉CMake去查找每个指定子目录中的`CMakeLists.txt`文件,并将它们纳入构建过程。 例如,假设你有以下项目结构: ``` project/ |-- CMakeLists.txt (顶级CMakeLists) |-- src/ | |-- CMakeLists.txt (src子目录的CMakeLists) |-- include/ | |-- CMakeLists.txt (include子目录的CMakeLists) ``` 在顶级`CMakeLists.txt`中,你可以这样写: ```cmake cmake_minimum_required(VERSION 3.10) project(MyProject) # 添加src子目录 add_subdirectory(src) # 添加include子目录 add_subdirectory(include) ``` 接下来,我们需要在`src/CMakeLists.txt`和`include/CMakeLists.txt`中定义各自的构建规则。在`src/CMakeLists.txt`中,你可能有多个源文件,可以使用`aux_source_directory()`获取所有源文件,然后使用`add_executable()`或`add_library()`来创建目标: ```cmake aux_source_directory(. SRC_LIST) add_executable(MyProgram ${SRC_LIST}) ``` 同样,在`include/CMakeLists.txt`中,如果包含头文件,可以使用`install()`命令将它们安装到适当的位置,以便在其他地方被引用: ```cmake install(DIRECTORY . DESTINATION include/${PROJECT_NAME}) ``` CMake还支持设置目标间依赖,例如库和程序之间的依赖。在子目录的`CMakeLists.txt`中,你可以使用`target_link_libraries()`来指定链接的库: ```cmake target_link_libraries(MyProgram PUBLIC MyLibrary) ``` 此外,CMake提供了一些高级特性,如`target_include_directories()`用于设置头文件路径,`target_compile_options()`用于添加编译选项,`find_package()`用于查找并链接外部库等。 在多目录项目中,正确管理头文件和库的可见性也很关键。你可以使用`PUBLIC`, `PRIVATE`和`INTERFACE`关键字来控制这些属性。例如: ```cmake target_include_directories(MyLibrary PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}/include) ``` 这样,`MyLibrary`的公共头文件路径就对其他链接它的目标可见了。 总结来说,CMake通过`add_subdirectory()`命令使多子目录项目编译变得简单。每个子目录的`CMakeLists.txt`文件负责自身的构建逻辑,而顶级`CMakeLists.txt`则作为整个项目的协调者。通过合理组织和配置,可以构建出复杂的多模块工程,方便跨平台编译和管理。在实际开发中,根据项目需求灵活运用这些CMake指令,可以提高工程的可维护性和可扩展性。
2024-12-12 22:05:45 3KB cmake 多个子目录
1
CMake 是一款管理源代码构建的工具。最初,CMake 被设计为 Makefile 各种方言的生成器,如今,CMake 可生成 Ninja 等现代构建系统以及 Visual Studio 和 Xcode 等集成开发环境的项目文件。 CMake 广泛用于 C 和 C++ 语言,但也可用于构建其他语言的源代码。
2024-09-18 14:14:25 10.47MB cmake linux ubuntu debian
1
### 专业知识点:《Professional CMake》概览与核心概念 #### 一、CMake简介与背景 - **定义**:CMake是一款跨平台的自动构建系统,它使用一种简单的域特定语言(DSL)来描述软件编译流程,能够自动生成特定构建系统的构建文件。 - **历史**:CMake由Kitware开发,首次发布于2000年,并且随着版本更新不断优化和完善。CMake被广泛应用于C++项目中,但也支持其他多种编程语言。 - **特点**: - 跨平台性:能够在Windows、macOS、Linux等操作系统上运行。 - 灵活性:支持多种构建工具,如Unix Makefiles、Ninja、MSVC等。 - 社区活跃:拥有庞大的用户群和活跃的开发者社区。 #### 二、书籍概述 - **书名**:《Professional CMake》 - **作者**:Craig Scott - **出版日期**:2018-2023年 - **ISBN**:978-1-925904-22-2 - **版本**:第14版 #### 三、书籍结构与内容概览 - **前言**:介绍CMake的基本概念和发展历程,以及本书的目的和读者对象。 - **致谢**:感谢为本书做出贡献的人们。 - **第一部分:基础篇**: - **第一章:简介**:解释CMake的核心概念,包括为什么选择CMake、其主要特性和优势。 - **第二章:设置项目**: - **2.1 在源代码目录构建**(In-source Builds):在项目源代码所在目录直接进行构建的过程。这种方法简单,但可能会导致源代码污染。 - **2.2 外部源代码目录构建**(Out-of-source Builds):在项目源代码之外的目录进行构建,可以保持源代码的清洁度,是推荐的做法。 - **后续章节**:预计会详细介绍CMake的各种高级功能和实际应用场景,例如多配置构建、并行构建、依赖管理等。 #### 四、CMake核心概念解析 1. **CMakeLists.txt 文件**:这是CMake项目中最核心的文件之一,用于描述项目的构建规则。 - **基本语法**:使用命令关键字来组织构建逻辑,如`add_executable()`、`add_library()`等。 - **变量与缓存**:CMake支持变量和缓存变量的定义与使用,其中缓存变量可以在构建过程中通过命令行或GUI工具修改。 - **条件语句**:支持使用`if()`、`foreach()`等控制结构来实现复杂的构建逻辑。 2. **项目配置**: - **最小化版本**:通过`cmake_minimum_required(VERSION X.Y)`指定最低版本要求。 - **项目声明**:使用`project()`命令初始化一个项目,可以设置项目名称、版本号等信息。 3. **目标创建**: - **可执行文件**:使用`add_executable()`创建可执行文件。 - **静态库/动态库**:使用`add_library()`创建静态库或共享库。 - **目标属性**:可以通过`target_XXX()`系列函数来设置或查询目标的属性。 4. **依赖管理**: - **目标依赖**:通过`target_link_libraries()`指定目标间的依赖关系。 - **外部依赖**:使用Find模块或者自定义脚本来查找和处理外部库。 5. **安装与部署**: - **安装指令**:通过`install()`命令定义安装规则。 - **打包工具**:利用CPack工具将项目打包成各种格式的安装包。 #### 五、实践建议与技巧 - **最佳实践**:推荐采用外部源代码目录构建方式,避免源代码污染;合理使用CMake的变量和缓存机制,提高构建灵活性。 - **调试技巧**:使用`message()`命令打印调试信息;结合CMake GUI等工具进行可视化调试。 - **性能优化**:通过设置`CMAKE_BUILD_TYPE`缓存变量来选择不同的构建类型,例如Debug、Release等;利用并行构建选项加速构建过程。 #### 六、结语 《Professional CMake》是一本深入浅出地介绍CMake的实用指南,适合不同水平的读者阅读。通过本书的学习,读者不仅可以掌握CMake的基础用法,还能了解如何利用CMake解决复杂构建问题的方法和技巧。对于想要提高构建效率、优化项目管理流程的开发者来说,《Professional CMake》是一本不可或缺的专业资料。
2024-09-04 12:00:15 5.72MB cmake
1
CMake 是一个跨平台的构建系统,用于管理软件构建过程。它通过简洁的配置文件(CMakeLists.txt)来描述项目结构和编译步骤,然后生成特定构建工具(如 Makefile 或 Visual Studio 工程)的构建脚本,使得开发者能够在不同的操作系统和编译环境中一致地构建软件。 在标题中提到的 "cmake-3.20.5-linux-aarch64.tar.gz" 是 CMake 的一个预编译版本,适用于 Linux 操作系统且基于 aarch64(64位ARM架构)的处理器。这个压缩包包含了在该平台上运行和安装 CMake 所需的所有文件。 解压这个 tar.gz 文件,你需要使用Linux终端中的 `tar` 命令。例如,你可以输入以下命令: ```bash tar -zxvf cmake-3.20.5-linux-aarch64.tar.gz ``` 解压后,你会得到一个名为 `cmake-3.20.5-linux-aarch64` 的目录,其中包含 `bin`、`lib`、`share` 等子目录,分别存放可执行文件、库文件和资源文件。为了能够全局使用 CMake,你需要将 `bin` 目录添加到系统的 PATH 环境变量中。这通常可以通过编辑 `~/.bashrc` 或 `~/.bash_profile` 文件来实现: ```bash echo 'export PATH="/path/to/cmake-3.20.5-linux-aarch64/bin:$PATH"' >> ~/.bashrc source ~/.bashrc ``` 确保将 `/path/to/cmake-3.20.5-linux-aarch64` 替换为实际的解压路径。这样,你就可以在任何地方通过 `cmake` 命令来调用 CMake。 CMake 的基本用法涉及创建一个名为 `CMakeLists.txt` 的文件,它定义了项目的构建规则。例如,你可能需要指定源代码目录、目标二进制文件、链接的库等。一个简单的 `CMakeLists.txt` 文件可能如下所示: ```txt cmake_minimum_required(VERSION 3.20) project(MyProject) add_executable(MyProject main.cpp) ``` 在这个例子中,`cmake_minimum_required` 设置了所需的 CMake 最低版本,`project` 定义了项目名,而 `add_executable` 声明了一个名为 `MyProject` 的可执行程序,其源代码为 `main.cpp`。 接下来,你可以使用 `cmake` 命令来初始化构建系统,然后使用 `make` 来构建项目: ```bash mkdir build cd build cmake .. make ``` 这里,`cmake ..` 会解析上一级目录中的 `CMakeLists.txt` 并生成构建脚本,`make` 则根据这些脚本编译项目。 CMake 支持多种高级特性,如目标依赖关系、编译选项控制、库的链接和查找、测试框架集成(CTest)、包装系统集成(CPack)以及文档生成(Doxygen 和 Sphinx)。通过 `find_package`,你可以轻松地在项目中引入其他依赖库,如 Boost、Qt 或者 OpenCV。 CMake 提供了一种强大的方式来管理和构建跨平台的软件项目,简化了不同环境下的构建流程,并确保了一致性。通过深入学习和熟练使用 CMake,开发者可以更高效地处理复杂的项目结构和依赖关系。
2024-08-15 11:20:38 43.05MB cmake
1
ceres-solver库是常用的解决非线性优化问题的代码库,具有较高的运算效率以及简单的使用方法,但其库在windows系统下的编译安装较为麻烦,在使用cmake进行编译的过程中会出现各种错误,使用起来很不方便。该资源提供编译好的与VS2019适配的ceres-solvers库,包含include、library和必要的dll文件三个文件夹。
2024-08-15 00:30:35 18.41MB windows
1
windows 环境下使用 cmake+mingw-w64+qt5.10 编译 opencv3.4... windows 环境下使用 cmake+mingw-w64+qt5.10 编译 opencv3.4... windows 环境下使用 cmake+mingw-w64+qt5.10 编译 opencv3.4... vvvv windows 环境下使用 cmake+mingw-w64+qt5.10 编译 opencv3.4... windows 环境下使用 cmake+mingw-w64+qt5.10 编译 opencv3.4... windows 环境下使用 cmake+mingw-w64+qt5.10 编译 opencv3.4... v windows 环境下使用 cmake+mingw-w64+qt5.10 编译 opencv3.4... windows 环境下使用 cmake+mingw-w64+qt5.10 编译 opencv3.4... 2018-----》
2024-08-01 17:22:41 168.14MB opencv windows cmake mingw
1
CMake是一个跨平台的自动化构建系统,用于管理软件构建过程。它的名称是“Cross-Platform Make”的缩写,旨在替代传统的Make工具,提供更高级别的抽象来管理编译过程,适用于多种操作系统和编译器环境。CMake由Kitware公司开发,支持Windows、Linux、macOS、Android以及iOS等多种平台,包括此处提到的ARM64架构。 标题“cmake-3.24.3-windows-arm64.zip”表明这是一个针对Windows操作系统和ARM64架构的CMake版本3.24.3的压缩包。这个版本的发布意味着它包含了所有必要的二进制文件和脚本,以便在64位ARM处理器(如Microsoft的Surface Pro X或高通Snapdragon设备)上安装和运行CMake。 描述中的“cmake-3.24.3-windows-arm64”是CMake的具体版本号和目标平台的标识,表明这是为Windows上的ARM64环境定制的。 由于标签为空,我们无法直接获取其他特定信息,但我们可以根据CMake的一般特性来扩展讨论。CMake的主要功能包括生成项目构建系统的元数据,这些数据可以被各种构建工具(如Ninja、Visual Studio、Make等)理解和使用。用户通过编写CMakeLists.txt文件来定义项目的构建规则,这些文件使用CMake自己的脚本语言,包含编译选项、库依赖、测试设置等。 在CMake 3.24.3版本中,可能包含以下新特性和改进: 1. 支持最新的编译器和构建工具版本。 2. 优化了性能和稳定性,修复了已知的错误。 3. 可能增加了对新平台或新API的支持。 4. 更新了文档和示例,以帮助开发者更好地理解和使用CMake。 在解压“cmake-3.24.3-windows-arm64.zip”后,通常会得到一个包含bin、lib、share等目录的结构,其中bin目录下有可执行文件,如`cmake.exe`和`ccmake.exe`等,用于命令行交互和图形界面配置;lib目录存放库文件;share则包含帮助文档和模版文件。 在实际开发中,CMake可以与Git、CTest、CPack等工具集成,实现版本控制、单元测试和软件打包。此外,CMake还支持模块化构建,允许在不同项目之间重用构建规则,大大简化了大型软件项目的构建流程。 CMake-3.24.3-windows-arm64是专门为Windows上的ARM64设备设计的构建系统,它简化了多平台软件开发的复杂性,提供了强大的构建工具和灵活的配置选项。如果你在基于ARM64的Windows系统上进行开发,这个版本的CMake将是你不可或缺的工具。
2024-07-12 11:39:30 37.48MB
1
SLAM十四讲依赖 Ceres、g2o优化库,Windows下的编译较为困难。以下为VS的配置以及编译好的 1.头文件 D:\include\Ceres_Install\install\ceres\include;D:\include\Ceres_Install\install\glog\include;D:\include\Ceres_Install\install\gflags\include;D:\include\Ceres_Install\install\suitesparse\include;D:\include\eigen-3.4.0\eigen-3.4.0;D:\include\opencv\opencv\build\include\opencv2;D:\include\opencv\opencv\build\include;$(IncludePath)
2024-07-07 16:49:54 124.08MB opencv windows
1
cmake安装包
2024-06-28 13:55:02 26.96MB cmake
1
cmake-3.24.0.tar.gz
2024-06-13 21:23:17 9.91MB
1