在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
易语言是一种专为初学者设计的编程语言,其特点在于语法简单、易学易用。在给定的压缩包文件中,"易语言源代码模块同时打包微信检存(检测微信账号是否存在)" 提供了一组易语言编写的源代码模块,用于实现检测微信账号是否存在这一功能。下面将详细介绍相关知识点: 1. **微信账号检测**:这个模块的核心功能是通过某种机制(可能是微信的公开API或其他方式)来验证一个给定的微信账号是否在系统中存在。这通常涉及到网络通信和数据解析,可能需要对HTTP协议、JSON或XML格式有基本的理解。 2. **易语言微信模块**:易语言提供了扩展模块机制,允许开发者添加额外的功能支持。这里的“微信模块”很可能是一个专门处理与微信交互的易语言扩展,包含了发送请求、接收响应、解析数据等函数。 3. **.bak 文件**:"微信检测帐号.bak" 可能是源代码的一个备份文件,通常在修改源代码时创建,以防万一需要恢复到之前的版本。 4. **.dll 文件**:"exdui.dll" 是动态链接库文件,可能包含了易语言的用户界面库(如ExDirectUI库),用于构建图形用户界面,与用户进行交互。 5. **.e 文件**:"微信检测帐号.e" 很可能是易语言的工程文件,保存了整个项目的配置、源代码引用和其他相关信息。打开这个文件,可以在易语言环境中直接编译和运行项目。 6. **.ec 文件**:".ec" 是易语言的模块文件,包含了易语言编写的代码模块。例如,"程序特效皮肤应用模块.ec"可能包含了一些用户界面特效的实现,"j精易模块.ec"可能是提供了一些高级功能的精简版易语言模块,而"Ex_DirectUI.ec"可能是与ExDirectUI相关的代码模块,"云速答题.ec"可能涉及到了在线答题系统的相关功能。 7. **ExDirectUI**:ExDirectUI是一个易语言的第三方库,它提供了丰富的UI控件和界面设计能力,使得开发者能够更方便地创建出美观的Windows应用程序。 这些文件共同构成了一个完整的微信账号检测解决方案,用户可以通过编译运行源代码,输入微信账号,然后程序会检查该账号是否真实存在于微信系统中。这个工具对于需要批量验证微信账号有效性的场景,如数据分析、营销活动等,具有一定的实用价值。在使用过程中,开发者需要遵循微信的使用条款,防止违反微信的反爬虫策略,确保操作的合法性。
2024-07-09 08:56:07 3.41MB 易语言微信
1
DMA控制两路DAC同时输出
2024-04-03 13:07:06 5.71MB STM32F4 DMA
1
本项目的功能是对YOLO格式的数据实现数据增强,使用本项目代码可以较快的完成扩充数据集快速扩充的工作,会对图像和标注同时处理。但其也存在一定的问题,例如无法保证处理后的数据一定能跑出更好的效果,处理结束后可能会出现一些损坏的图片(原图过大时)。 但本项目处理后出现的坏图,在YOLOv5中会被识别出来并不做训练,其实对训练影响不大,追求完美的同学可以考虑不使用resize系列的函数,手动剔除坏图,使用其他数据增强项目完成工作等。 使用 1. download本项目到本地(建议下载到有图形界面的操作系统中) 2. 打开DataAugOnDetectin.py 修改 image_path, label_path, save_path 三个参数 ``` image_path = "" # 图片的路径 label_path = "" # 标签文件的路径 save_path = "" # 数据增强的结果保存位置路径 ``` 3. 运行,使用pycharm或spyder等软件运行DataAugOnDetectin.py
2024-04-02 13:07:26 897KB python
1
此Arduino 项目是一个示例项目,本地温度数值自动上传巴法云平台,每行代码都有注释,方便理解。长按开关点亮led,长按开关熄灭led,同时可以将当前led的状态上传到巴法云对应订阅的主题,对应主题推送消息可改变led当前状态
2024-03-21 21:35:12 228KB Arduino ESP8266 MQTT DHT11
1
Nlog同时输出到文件、控制台、RichTextBox VS2010+.net4.0+NLog+NLog.Windows.Forms 博客地址: https://blog.csdn.net/lw112190/article/details/131915209
2024-03-20 10:48:59 657KB .net windows NLog
1
一次上传多个文件的功能,想传多少就传多少,不用在多次操作
2024-03-03 08:44:15 37KB
1
如下所示: import sys from PyQt5.QtWidgets import QMainWindow, QTextEdit, QAction, QApplication from PyQt5.QtGui import QIcon from PyQt5.QtCore import Qt class Example(QMainWindow): def __init__(self): super().__init__() self.initUI() def initUI(self): textEdit = QTextEdit() self.set
2024-02-02 00:03:39 27KB pyqt pyqt5
1
一个本地拍照后,剪切图片,然后上传到php服务器端,并且实现把图片保存在设置的文件夹中,以便后面开发中要获取该图片
2023-12-25 09:07:29 1.21MB android 图片上传保存
1
网上大部分cityscapes转VOC的代码都不完整,所以写了这个完整转换VOC格式的脚本 注意事项: cityscapes_root需要自行修改,应设为leftImg8bit_trainvaltest和gtFine_trainvaltest所在的目录。 由于cityscapes的中并不包含VOC中的truncated和difficult信息,所以将所有object中truncated和difficult的值都设为0。 cityscapes数据集,通常将val作为test集用于验证性能,因为官方没有放出test集的标注,目的是防止有人用test集训练,在网站上刷分。
2023-12-19 14:16:58 6KB 目标检测 Cityscapes 计算机视觉
1