I am working on a cross-platform codebase on Clang/MacOS X that is also
compiled with Visual Studio on Windows and GCC on Linux.
The source code headers always include "precomp_common.h" at the top of each
header files. But according to the Clang documentation
(http://clang.llvm.org/docs/UsersManual.html#usersmanual-precompiled-headers)
Clang will NOT use the PCH in this case and no speed up will be performed
since it was not include via "- include".
Using Clang it seems the only way is to perform a conditional include:
1.
#ifndef __clang__
#include "precomp_common.h"
#endif
2. Add "precomp_common.h" to the prefix header via -include option.
I wonder if there is a "cleaner" way to do it.
I am working on a cross-platform codebase on Clang/MacOS X that is also
compiled with Visual Studio on Windows and GCC on Linux.
The source code headers always include “precomp_common.h” at the top of each
header files. But according to the Clang documentation
(http://clang.llvm.org/docs/UsersManual.html#usersmanual-precompiled-headers)
Clang will NOT use the PCH in this case and no speed up will be performed
since it was not include via “- include”.
Using Clang it seems the only way is to perform a conditional include:
#ifndef clang
#include “precomp_common.h”
#endif
- Add “precomp_common.h” to the prefix header via -include option.
You don’t need to do 1.; by doing 2. the "#include “precomp_common.h” will just be skipped.
I generally find the VS model to be the unclean one. Remove the include directive from all files, and in your project options, under C/C++ -> Advanced, add it to Forced Includes. This makes it pass the file to the compiler via the equivalent of the -include directive. (You still need to have it specified as the precompiled header.)
Sebastian
So the documentation at (http://clang.llvm.org/docs/UsersManual.html#usersmanual-precompiled-headers) should be disregarded ?
There’s some misunderstanding, what I said was that you should follow the documentation and use an -include “precomp_common.h” option.
“precomp_common.h” should be multiple-includes-guarded (e.g. with a guard macro or “#pragma once”) thus the #ifndef in
#ifndef clang
#include “precomp_common.h”
#endif
will be unnecessary.