有没有办法检查头文件是否直接或间接包含在gcc的单个编译单元中?

z31licg0  于 2023-10-19  发布在  其他
关注(0)|答案(1)|浏览(88)
// a.cc  
#include "a.h"
// a.h  
#include "b.h"  
#include "c.h"
// b.h  
#include "c.h"
// c.h
#include <string>

“b. h”由当前合规单位直接处理
“c.h”由“gcc -H”间接处理
我想防止开发人员直接在“a.cc“中包含“c.h”。
gcc有插件事件“PLUGIN_INCLUDE_FILE”,不幸的是,提供的信息,不像clang,不足以做到这一点,(也许我没有找到它)
P.S.我想做一些像bazel layercheck(https:bazel.build/reference/be/c-cpp#hdrs)(clang -fmodules-decluse blabla...),使用cmake和gcc工具链
P.S.如果基本名称相同,则“xx.h”和“xx.cc“为组件单元

yv5phkfx

yv5phkfx1#

命令行选项-H导致gcc打印包含的每个头文件的名称。
自动生成的.d头依赖文件还包含.o文件所包含的所有文件的完整路径。
我想阻止开发人员直接在“a.cc“中包含“c.h”
您可以使用gcc用于此目的的相同方法。例如:/usr/lib/gcc/x86_64-linux-gnu/11/include/avx2intrin.h:

#ifndef _IMMINTRIN_H_INCLUDED
# error "Never use <avx2intrin.h> directly; include <immintrin.h> instead."
#endif

相关问题