当前位置: 首页 > news >正文

CMake指令:aux_source_directory

目录

1.简介

2.常见使用场景

3.注意事项

4.替代方案

5.总结

相关链接


1.简介

   aux_source_directory 是 CMake 中用于收集源文件的命令,可自动将指定目录下的所有源文件添加到变量中。

        基本语法:

aux_source_directory(<dir> <variable>)
  • <dir>:源文件所在目录(相对路径或绝对路径)。
  • <variable>:存储源文件列表的变量名。

核心作用就是自动收集指定目录下的所有 C/C++ 源文件.c.cpp.cc 等),避免手动列出每个文件。例如:

# 收集 src/ 目录下的所有源文件到 SRC_LIST 变量
aux_source_directory(src SRC_LIST)# 添加可执行文件,使用收集的源文件
add_executable(my_app ${SRC_LIST})

2.常见使用场景

1.简单项目

# CMakeLists.txt
cmake_minimum_required(VERSION 3.10)
project(MyApp)# 收集当前目录下的所有源文件
aux_source_directory(. SRC_FILES)# 添加可执行文件
add_executable(my_app ${SRC_FILES})

2.多目录项目

# CMakeLists.txt
cmake_minimum_required(VERSION 3.10)
project(MyApp)# 收集多个目录的源文件
aux_source_directory(src/core CORE_SRC)
aux_source_directory(src/gui GUI_SRC)# 合并源文件列表
set(ALL_SRC ${CORE_SRC} ${GUI_SRC})# 添加可执行文件
add_executable(my_app ${ALL_SRC})

3.注意事项

1.不递归搜索子目录

  • aux_source_directory 默认只收集指定目录下的文件,不包含子目录。
  • 解决方案:对每个子目录单独调用 aux_source_directory
aux_source_directory(src/core CORE_SRC)
aux_source_directory(src/plugins PLUGIN_SRC)

2.可能包含不需要的文件

  • 若目录中包含测试文件或临时文件,会被一并收集。
  • 解决方案:改用 file(GLOB ...) 精确控制:
file(GLOB SRC_FILES "src/*.cpp" "src/*.c")  # 只收集 .cpp 和 .c 文件

3.CMake 缓存问题

  • 新增源文件时,CMake 可能不会自动重新扫描目录。
  • 解决方案:手动删除 CMakeCache.txt 或使用 cmake -E touch CMakeLists.txt 触发重新配置。

4.不推荐用于生产环境

  • 官方文档指出:aux_source_directory 可能导致意外文件被编译,建议优先使用 file(GLOB ...) 或显式列出文件。

4.替代方案

1.使用 file(GLOB)(更灵活)

# 收集 src/ 目录下的所有 .cpp 文件(不递归)
file(GLOB SRC_FILES "src/*.cpp")# 递归收集 src/ 及其子目录下的所有 .cpp 文件
file(GLOB_RECURSE SRC_FILES "src/*.cpp")

2.显式列出文件(最推荐)

add_executable(my_appsrc/main.cppsrc/utils.cppsrc/gui/window.cpp
)

5.总结

aux_source_directory 是快速收集源文件的便捷工具,但存在局限性(如不递归、缓存问题)。在实际项目中,建议根据规模和需求选择合适的方法:

  • 快速原型aux_source_directory
  • 生产环境:显式列出文件或 file(GLOB)
  • 需要递归file(GLOB_RECURSE)

通过合理选择,可平衡开发效率与项目可控性。

相关链接

  • CMake 官网 CMake - Upgrade Your Software Build System
  • CMake 官方文档:CMake Tutorial — CMake 4.0.2 Documentation
  • CMake 源码:https://github.com/Kitware/CMake
  • CMake 源码:CMake · GitLab
  • 中文版基础介绍: CMake 入门实战 | HaHack
  • wiki: Home · Wiki · CMake / Community · GitLab
http://www.xdnf.cn/news/988273.html

相关文章:

  • RFID测温芯片在新能源电池管理中的创新应用
  • 11. 线性表的顺序表示和实现(3)
  • AI视频生成API:一站式视频生成解决方案
  • JAVA(Day_4
  • 网络管理【Linux/Unix/Windows】命令大全
  • 保障信号纯净:线材滤波器在复杂电磁环境中的作用
  • Java 8 Stream 流全面使用教程 - 完整版
  • 肩胛骨髓外浸润
  • Android11 Launcher3实现去掉抽屉改为单层
  • 汇编(cpu寄存器描述)
  • 字符串和内存函数(2)
  • MacBook M1 Pro下载安装MySql
  • Redis分布式缓存(RDB、AOF、主从同步)
  • force命令的使用
  • 图文教程——Deepseek最强平替工具免费申请教程——国内edu邮箱可用
  • 传统Web应用和RESTful API模式
  • javaee初阶-多线程
  • C++基础
  • Oracle集群OCR磁盘组掉盘问题处理
  • echart pie label.rich 颜色设置与项目同色
  • matlab红外与可见光图像配准算法
  • Flask 报错修复实战:send_file() got an unexpected keyword argument ‘etag‘
  • 什么是Power Distribution Unit(PDU)以及智能PDU:应用的演变历程
  • C#简单线程启动的几种方法总结
  • Windows平台网络通信
  • SQL Server 查询数据库中所有表中所有字段的数据类型及长度
  • 从“字对字“到“意对意“:AI翻译正在重塑人类的语言认知模式
  • 从代码学习深度学习 - 全局向量的词嵌入(GloVe)PyTorch版
  • 医疗行业双碳战略升维:从合规达标到价值创造的转型路径
  • JavaWeb(JavaBean预习)