在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
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
GTSAM,全称为"Generic Graphical Modeling Toolkit for Smoothing and Mapping",是一个强大的C++库,主要用于解决机器人定位与建图(SLAM,Simultaneous Localization and Mapping)以及相关优化问题。它提供了高效的因子图(factor graph)框架,允许开发者以图形模型的方式表达复杂的多传感器融合和状态估计问题。 在GTSAM中,因子图是一种特定类型的图结构,由变量节点和因子节点组成。变量节点代表未知参数,如机器人位置或环境特征,而因子节点则包含关于这些参数的先验知识或测量信息。这种数据结构使得GTSAM能够通过贝叶斯推理来解决非线性最小二乘问题,即找到最可能的参数值以使所有因子的联合概率最大。 GTSAM库的主要特点包括: 1. **模块化设计**:GTSAM采用模块化的设计,允许用户轻松地添加新的传感器模型或因子类型。例如,你可以方便地扩展以处理来自激光雷达、相机、惯性测量单元(IMU)等不同传感器的数据。 2. **高效优化算法**:GTSAM利用基于Baum-Welch的期望最大化(EM)算法和Levenberg-Marquardt(LM)方法进行参数优化。这些算法可以有效地处理大规模的非线性问题,并保证收敛到局部最优解。 3. **延迟初始化**(lazy initialization):GTSAM支持延迟初始化,这意味着只有在需要时才会计算和存储变量的值,这极大地节省了内存,特别是在处理大型图时。 4. **因子图重构造**(Bayes Tree):GTSAM提供了一种名为Bayes Tree的数据结构,它能够高效地执行增量式更新,对于在线SLAM场景尤其有用。Bayes树可以保持因子图的条件独立性,使得计算后验概率更为高效。 5. **接口友好**:GTSAM库提供了易于使用的C++模板接口,同时也支持Python和Matlab接口,便于科研人员和工程师进行原型开发和测试。 6. **文档和示例**:GTSAM项目提供了丰富的文档和示例代码,帮助用户理解和使用该库。其中,gtsam-4.0.2版本应该包含了库的源代码、API文档、示例程序和教程,可以帮助开发者快速上手。 在实际应用中,GTSAM广泛应用于机器人自主导航、自动驾驶汽车、无人机定位、室内定位、三维重建等多个领域。通过学习和掌握GTSAM,开发者可以构建出高效、准确的定位和建图系统,为实际问题提供解决方案。
2024-07-07 17:11:28 27.49MB
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
CMake官方中文手册.pdf,对于学习CMake的用法很有帮助,跨平台让CMake成为了一个通用的版本
2024-05-08 17:34:28 305KB CMake
1