在每个源文件中包含一个头文件

时间:2012-03-30 14:59:28

标签: c++ c header clang

假设您有100个源文件(.c或.cpp)文件,并且您希望在每个文件中包含一些定义,函数/变量声明。通常在C / C ++中,您可以使用头文件来实现此目的。但在这种情况下,您需要在每个源文件中放入#include“header.h”。

现在我的问题是,有没有办法为所有文件包含一个标题而不在每个文件中放入#include“header.h”,因为编写#include“header.h”会非常烦人100个源文件。

4 个答案:

答案 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来帮助你填补空白而不是伤到你的手指。