103

Is it possible to specify extra header files to include from the command line (using GCC 4 / C++)?

Or is there any other way files can be included except with #include?

Background: I'm trying to compile a large code base on my own PC. The code is usually compiled in a cluster, with a complicated build system (SoftRelTools anybody?), which is intertwined with the operating system, such that it is virtually impossible to install it somewhere else (literally hundreds of makefiles and shell scripts, and hard coded paths to network drives). However, the actual code is fairly straightforward, and compiles fine, BUT it is missing a lot of includes (mostly a la "include <vector>" and "include <math.h>"). I'm guessing the build system takes care of this usually, but I have to go through the code and add the includes manually, which I'd rather avoid.

3 Answers 3

116

I found the -include option. Does this what you want?

-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.

Sign up to request clarification or add additional context in comments.

7 Comments

FYI the -include feature is primarily intended to support precompiled headers. This way you can inject your .pch file into all your source files without having to edit every single one.
Thanks! Although I did RTFM (M=manpage), I missed that. I also thought PCHs were just a Visual C++ feature... but it seems like this is what they were using in the build system...
the corresponding command line argument for Visual C* would be /FI, just in case anyone needs to port builds that use this.
anything similar for #include <file> (angle brackets)? to be more detailed i'm interested in clang support for it
Fantastic. @gavinb I used this for a baremetal use-case when I needed to supplement some of the libc headers with a few substituted functions and/or extensions to my libc code. All my code can still use standard headers for prototypes, but also forcefully include some extra definitions I need to make them work on my platform.
|
36

From the gcc manual:

-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.

Comments

17

According to gcc documentation, the command line switch "-include file" would do the job.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.