在每个源文件中包含一个头文件
假设您有100个源文件(.c或.cpp)文件,并且您希望在每个文件中包含一些定义,函数/变量声明。 通常在C / C ++中,您使用头文件来实现此目的。 但在这种情况下,您需要在每个源文件中放入#include“header.h”。
现在我的问题是,有没有办法为所有文件包含一个标题而不在每个文件中放入#include“header.h”,因为编写#include“header.h”为100s是非常烦人的源文件。
您可以对clang或GCC使用-include
标志。 从手册页 :
– 包含文件
处理文件好像
"#include "file""
出现在主源文件的第一行。 但是,搜索文件的第一个目录是预处理器的工作目录, 而不是包含主源文件的目录。 如果在那里找不到,则在"#include "...""
搜索链的其余部分中搜索正常。如果给出了多个-include选项,则文件将按照它们在命令行中显示的顺序包含在内。
例:
clang -include header.h -c file1.c clang -include header.h -c file2.c clang -include header.h -c file3.c clang -o app file1.o file2.o file3.o
MSVC具有/FI
标志 ,类似。
是的,这会很烦人。 这就是你使用shell的原因 ……
下面的神秘咒语将完全按照你的要求进行几次击键!
find ./ -name "*.c" -or -name "*.cpp" | xargs -n 1 sed -i '1 i #include '
屈服于unix的强大力量,异教徒……
虽然您可以编写脚本来执行此操作,但您不能这样做。 一个脚本,它接收每个文件,并在顶部写入 编辑: #include "header.h"
。 -include
在gcc中执行此操作。
但是,您需要的是通过编译器选项以不同的方式实现的。 在gcc中,使用-D
。
假设您希望在所有源文件DEBUG_LEVEL
定义为2。 你可以通过调用这样的gcc来做到这一点:
gcc -DDEBUG_LEVEL=2
请注意,在这种情况下,您需要重建所有项目(如果您已将所有源文件所依赖的1个头文件中的此定义更改,则无论如何都会这样做)
头文件不是定义 – 它们是声明。
您尽可能少地使用 – 保存编译器工作以及相互依赖性。
您甚至可以通过在这些头文件中使用前向声明来进一步减少数量。
如果你很聪明,你可以通过IDE来帮助你填补空白而不是伤到你的手指。