如何在主程序中一次性引入整个文件夹内的所有.hh头文件?
批量引入.hh头文件的解决方案
C/C++ 标准语法本身没有提供直接引入指定文件夹下所有头文件的原生特性,你可以通过以下几种常用方案实现批量引入,避免逐个编写#include语句:
方案1:手动生成汇总头文件(无额外依赖,适配所有场景)
思路是把指定目录下所有.hh文件的引入语句统一汇总到一个单独的头文件中,主程序仅需要引入这一个汇总文件即可:
- Windows 环境可以用批处理实现:在.hh文件所在目录新建.bat脚本,写入以下内容后运行:
运行后会在当前目录生成@echo off for %%f in (*.hh) do echo #include "%%f" >> all_hh.hall_hh.h文件,主程序添加#include "all_hh.h"即可完成所有.hh的引入,后续新增.hh文件时重新运行一次脚本即可更新。 - Linux/Mac 环境可以直接执行shell命令生成:
ls *.hh | awk '{print "#include \""$0"\""}' > all_hh.h
注意:如果你的.hh文件之间存在依赖顺序,需要手动调整汇总头文件里#include语句的先后顺序,否则会出现编译报错
方案2:构建工具自动生成(适合使用CMake/Makefile的项目)
如果你在项目中使用了构建工具,可以直接在构建配置中添加自动生成汇总头的规则,每次构建时自动更新,不需要手动跑脚本:
以CMake为例,在CMakeLists.txt中添加以下逻辑即可:
# 替换为你自己的.hh文件存放路径 file(GLOB HH_FILES "${CMAKE_CURRENT_SOURCE_DIR}/hh_dir/*.hh") set(AUTO_GEN_HH "${CMAKE_CURRENT_BINARY_DIR}/all_hh.h") file(WRITE ${AUTO_GEN_HH} "") foreach(HH_ITEM ${HH_FILES}) file(APPEND ${AUTO_GEN_HH} "#include \"${HH_ITEM}\"\n") endforeach() # 将生成的头文件目录加入引入路径 include_directories(${CMAKE_CURRENT_BINARY_DIR})
后续主程序直接引入#include "all_hh.h"即可,新增.hh文件后重新构建就会自动更新。
不推荐的实现方式
不要尝试用宏递归、目录通配符等非常规方式实现批量引入,很容易出现重复包含、依赖链混乱、编译速度大幅下降的问题,后续维护成本极高。
内容的提问来源于stack exchange,提问作者LSS
相关产品推荐
相关产品推荐

