在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
CMakeLists常用语法,常用变量,常用示例
2023-01-05 21:15:50 654KB CMakeLists.txt CMakeLists示例
1
很好的几个cmake的例子,单文件和多文件的。。。。。。。
2022-12-06 09:14:45 14KB cmake cmakelists.t
1
project(yolov5) set(OpenCV_DIR "D:\\yolov5_tensorrt\\yolov5_tensorrt\\opencv\\build") #2 set(OpenCV_INCLUDE_DIRS ${OpenCV_DIR}/include) #3 set(OpenCV_LIB_DIRS ${OpenCV_DIR}/x64/vc15/lib) #4 set(OpenCV_Debug_LIBS "opencv_world343d.lib") #5 set(OpenCV_Release_LIBS "opencv_world343.lib") #6 set(TRT_DIR "D:\\yolov5_tensorrt\\yolov5_tensorrt\\TensorRT-7.0.0.11.Windows10.x86_64.cuda-10.2.cudnn7.6\\TensorRT-7.0.0.11") #3 set(TRT_INCLUDE_DIRS ${TRT_DIR}/include) #8 set(TRT_LIB_DIRS ${TRT_DIR}/lib) #9 #
2022-09-29 21:05:14 3KB cmake yolov5
1
已经经过路径的修改了。给大家参考
2022-08-11 21:05:36 1KB yolo tensorrt
1
CMakeLists.txt使用QT的正确写法
2022-06-24 21:48:17 30KB Cmake QT
1
CMake入门级范例,针对相对简单的工程管理。
2022-05-23 10:00:57 4KB 源码软件
1
CMakeLists.txt
2022-05-16 16:15:57 357B cmake
1
Windows编译libfdk-aac时需要的CMakeLists文件,利用CMake Gui编译生成需要的库文件,详细用法可见https://blog.csdn.net/qq_37984341/article/details/106520723
2022-03-19 22:52:54 3KB C++ libfdk-aac Windows
1
cmake实践(CMakelists写法)
2022-03-08 16:14:19 404KB cmake
1