当前位置: 首页 > 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

相关文章:

  • MCP(Model Context Protocol)与 LangChain的区别与联系
  • tryhackme 之反弹 shell 理解
  • 量子加速器切入 AI 底层架构!能源焦虑时代,ORCA 正在改写数据中心的计算逻辑
  • Debian/Ubuntu systemd coredump调试程序Crash
  • 基于ElasticSearch的法律法规检索系统架构实践
  • 基于鸿蒙 HarmonyOS 5 打车小程序案例
  • jupyter中的checkpoints为空/打不开解决办法
  • Vue 事件绑定机制详解
  • 代理模式:AOP 切面编程的底层实现基础
  • 7.路由汇聚及更新
  • 6月11日day51打卡
  • 大三自学笔记:探索Hyperlane框架的心路历程
  • 2025低空经济区的安全与应急控制专题研讨会(SECOLZ 2025)
  • Linux5.10内核stmmac驱动框架深度解析
  • 纯血Harmony NETX 5小游戏实践:电子木鱼(附源文件)
  • 极线约束理解
  • Unity基础-Resources资源动态加载
  • MySQL 8.0 OCP 英文题库解析(十七)
  • 以 OCP 认证培训为翼,翱翔数据库广阔天空
  • MySQL 8.0 OCP 英文题库解析(十六)
  • 开封做网站公司汉狮/太原关键词优化服务
  • 做程序的网站/2023广州疫情最新消息今天
  • 关于网站建设征求意见/职业教育培训机构排名前十
  • 怎么盗号网站怎么做/seo推广小分享
  • 如何做建材网站的线下推广/软文广告案例500字
  • 青海建设局网站/上海网站关键词排名