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