pythonic
pythonic

Reputation: 21605

Include one header file in each source file

Say you have 100s of source files (.c or .cpp) files, and you want to include some definitions, function/variable declarations in each of them. Normally in C/C++, you use header files for that purpose. But in this case you need to put #include "header.h" in each source file.

Now my question is, is there a way to include one header for all the files without putting #include "header.h" in each of the file, because it will be very tiresome to write #include "header.h" for 100s of source files.

Upvotes: 10

Views: 14998

Answers (4)

brice
brice

Reputation: 25039

You could solve this problem using a unix pipe

find ./ -name "*.c" -or -name "*.cpp" | xargs -n 1 sed -i '1 i #include <my_header.h>'

Upvotes: 3

Carl Norum
Carl Norum

Reputation: 224864

You can use the -include flag for clang or GCC. From the man page:

-include file

Process file as if "#include "file"" appeared as the first line of the primary source file. However, the first directory searched for file is the preprocessor's working directory instead of the directory containing the main source file. If not found there, it is searched for in the remainder of the "#include "..."" search chain as normal.

If multiple -include options are given, the files are included in the order they appear on the command line.

Example:

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 has the /FI flag, which is similar.

Upvotes: 15

Ed Heal
Ed Heal

Reputation: 59997

Header files are not definitions - they are declarations.

You put as few in as possible - saves the compiler work and also inter-dependencies.

You can even reduce the number further by using forward declarations in those header files.

If you are clever you can get you IDE to help you out with filling in the gaps instead of hurting your fingers.

Upvotes: 0

Shahbaz
Shahbaz

Reputation: 47503

You can't do that, although you could write a script for you to do it. A script that takes each files, and writes #include "header.h" at top. Edit: -include in gcc does this.

However, what you need is achievable in a different way through the compiler options. In gcc, with -D.

Let's say, you want the define DEBUG_LEVEL to 2 in all your source files. You can simply do this by invoking gcc like this:

gcc -DDEBUG_LEVEL=2

Note that in this case, you would need to rebuild all your project (which would have been done anyway if you had changed this definition in 1 header file to which ALL the source files depend on)

Upvotes: 1

Related Questions