Heres my build log when I rename all.hpp to all.h and set it as precompiled header:
Build started on: 05-04-2013 at 22:37.59
Build ended on: 05-04-2013 at 22:38.00
-------------- Build: debug in precompiled_test (compiler: GNU GCC Compiler)---------------
g++ -Wall -Winvalid-pch -H -g -Wextra -Wall -c /home/pawel/Pulpit/test/precompiled_test/all.h -o all.h.gch
/home/pawel/Pulpit/test/precompiled_test/all.h:1:9: warning: #pragma once in main file [enabled by default]
. /usr/lib/gcc/x86_64-redhat-linux/4.7.2/../../../../include/c++/4.7.2/iostream
.. /usr/lib/gcc/x86_64-redhat-linux/4.7.2/../../../../include/c++/4.7.2/x86_64-redhat-linux/bits/c++config.h
... /usr/include/bits/wordsize.h
... /usr/lib/gcc/x86_64-redhat-linux/4.7.2/../../../../include/c++/4.7.2/x86_64-redhat-linux/bits/os_defines.h
.... /usr/include/features.h
..... /usr/include/sys/cdefs.h
...... /usr/include/bits/wordsize.h
..... /usr/include/gnu/stubs.h
...... /usr/include/bits/wordsize.h
...... /usr/include/gnu/stubs-64.h
... /usr/lib/gcc/x86_64-redhat-linux/4.7.2/../../../../include/c++/4.7.2/x86_64-redhat-linux/bits/cpu_defines.h
.. /usr/lib/gcc/x86_64-redhat-linux/4.7.2/../../../../include/c++/4.7.2/ostream
... /usr/lib/gcc/x86_64-redhat-linux/4.7.2/../../../../include/c++/4.7.2/ios
.... /usr/lib/gcc/x86_64-redhat-linux/4.7.2/../../../../include/c++/4.7.2/iosfwd
..... /usr/lib/gcc/x86_64-redhat-linux/4.7.2/../../../../include/c++/4.7.2/bits/stringfwd.h
..... /usr/lib/gcc/x86_64-redhat-linux/4.7.2/../../../../include/c++/4.7.2/bits/postypes.h
...... /usr/lib/gcc/x86_64-redhat-linux/4.7.2/../../../../include/c++/4.7.2/cwchar
....... /usr/include/wchar.h
........ /usr/include/stdio.h
........ /usr/lib/gcc/x86_64-redhat-linux/4.7.2/include/stdarg.h
........ /usr/include/bits/wchar.h
........ /usr/lib/gcc/x86_64-redhat-linux/4.7.2/include/stddef.h
........ /usr/include/xlocale.h
.... /usr/lib/gcc/x86_64-redhat-linux/4.7.2/../../../../include/c++/4.7.2/exception
..... /usr/lib/gcc/x86_64-redhat-linux/4.7.2/../../../../include/c++/4.7.2/bits/atomic_lockfree_defines.h
.... /usr/lib/gcc/x86_64-redhat-linux/4.7.2/../../../../include/c++/4.7.2/bits/char_traits.h
..... /usr/lib/gcc/x86_64-redhat-linux/4.7.2/../../../../include/c++/4.7.2/bits/stl_algobase.h
...... /usr/lib/gcc/x86_64-redhat-linux/4.7.2/../../../../include/c++/4.7.2/bits/functexcept.h
....... /usr/lib/gcc/x86_64-redhat-linux/4.7.2/../../../../include/c++/4.7.2/bits/exception_defines.h
...... /usr/lib/gcc/x86_64-redhat-linux/4.7.2/../../../../include/c++/4.7.2/bits/cpp_type_traits.h
...... /usr/lib/gcc/x86_64-redhat-linux/4.7.2/../../../../include/c++/4.7.2/ext/type_traits.h
...... /usr/lib/gcc/x86_64-redhat-linux/4.7.2/../../../../include/c++/4.7.2/ext/numeric_traits.h
...... /usr/lib/gcc/x86_64-redhat-linux/4.7.2/../../../../include/c++/4.7.2/bits/stl_pair.h
....... /usr/lib/gcc/x86_64-redhat-linux/4.7.2/../../../../include/c++/4.7.2/bits/move.h
........ /usr/lib/gcc/x86_64-redhat-linux/4.7.2/../../../../include/c++/4.7.2/bits/concept_check.h
...... /usr/lib/gcc/x86_64-redhat-linux/4.7.2/../../../../include/c++/4.7.2/bits/stl_iterator_base_types.h
...... /usr/lib/gcc/x86_64-redhat-linux/4.7.2/../../../../include/c++/4.7.2/bits/stl_iterator_base_funcs.h
...... /usr/lib/gcc/x86_64-redhat-linux/4.7.2/../../../../include/c++/4.7.2/bits/stl_iterator.h
...... /usr/lib/gcc/x86_64-redhat-linux/4.7.2/../../../../include/c++/4.7.2/debug/debug.h
..... /usr/lib/gcc/x86_64-redhat-linux/4.7.2/../../../../include/c++/4.7.2/cwchar
...... /usr/include/wchar.h
.... /usr/lib/gcc/x86_64-redhat-linux/4.7.2/../../../../include/c++/4.7.2/bits/localefwd.h
..... /usr/lib/gcc/x86_64-redhat-linux/4.7.2/../../../../include/c++/4.7.2/x86_64-redhat-linux/bits/c++locale.h
...... /usr/lib/gcc/x86_64-redhat-linux/4.7.2/../../../../include/c++/4.7.2/clocale
....... /usr/include/locale.h
........ /usr/lib/gcc/x86_64-redhat-linux/4.7.2/include/stddef.h
........ /usr/include/bits/locale.h
..... /usr/lib/gcc/x86_64-redhat-linux/4.7.2/../../../../include/c++/4.7.2/cctype
...... /usr/include/ctype.h
....... /usr/include/bits/types.h
........ /usr/include/bits/wordsize.h
........ /usr/include/bits/typesizes.h
....... /usr/include/endian.h
........ /usr/include/bits/endian.h
........ /usr/include/bits/byteswap.h
......... /usr/include/bits/wordsize.h
.... /usr/lib/gcc/x86_64-redhat-linux/4.7.2/../../../../include/c++/4.7.2/bits/ios_base.h
..... /usr/lib/gcc/x86_64-redhat-linux/4.7.2/../../../../include/c++/4.7.2/ext/atomicity.h
...... /usr/lib/gcc/x86_64-redhat-linux/4.7.2/../../../../include/c++/4.7.2/x86_64-redhat-linux/bits/gthr.h
....... /usr/lib/gcc/x86_64-redhat-linux/4.7.2/../../../../include/c++/4.7.2/x86_64-redhat-linux/bits/gthr-default.h
........ /usr/include/pthread.h
......... /usr/include/sched.h
.......... /usr/lib/gcc/x86_64-redhat-linux/4.7.2/include/stddef.h
.......... /usr/include/time.h
.......... /usr/include/bits/sched.h
......... /usr/include/time.h
.......... /usr/lib/gcc/x86_64-redhat-linux/4.7.2/include/stddef.h
.......... /usr/include/bits/time.h
........... /usr/include/bits/timex.h
......... /usr/include/bits/pthreadtypes.h
.......... /usr/include/bits/wordsize.h
......... /usr/include/bits/setjmp.h
.......... /usr/include/bits/wordsize.h
......... /usr/include/bits/wordsize.h
...... /usr/lib/gcc/x86_64-redhat-linux/4.7.2/../../../../include/c++/4.7.2/x86_64-redhat-linux/bits/atomic_word.h
..... /usr/lib/gcc/x86_64-redhat-linux/4.7.2/../../../../include/c++/4.7.2/bits/locale_classes.h
...... /usr/lib/gcc/x86_64-redhat-linux/4.7.2/../../../../include/c++/4.7.2/string
....... /usr/lib/gcc/x86_64-redhat-linux/4.7.2/../../../../include/c++/4.7.2/bits/allocator.h
........ /usr/lib/gcc/x86_64-redhat-linux/4.7.2/../../../../include/c++/4.7.2/x86_64-redhat-linux/bits/c++allocator.h
......... /usr/lib/gcc/x86_64-redhat-linux/4.7.2/../../../../include/c++/4.7.2/ext/new_allocator.h
.......... /usr/lib/gcc/x86_64-redhat-linux/4.7.2/../../../../include/c++/4.7.2/new
....... /usr/lib/gcc/x86_64-redhat-linux/4.7.2/../../../../include/c++/4.7.2/bits/ostream_insert.h
........ /usr/lib/gcc/x86_64-redhat-linux/4.7.2/../../../../include/c++/4.7.2/bits/cxxabi_forced.h
....... /usr/lib/gcc/x86_64-redhat-linux/4.7.2/../../../../include/c++/4.7.2/bits/stl_function.h
........ /usr/lib/gcc/x86_64-redhat-linux/4.7.2/../../../../include/c++/4.7.2/backward/binders.h
....... /usr/lib/gcc/x86_64-redhat-linux/4.7.2/../../../../include/c++/4.7.2/bits/range_access.h
....... /usr/lib/gcc/x86_64-redhat-linux/4.7.2/../../../../include/c++/4.7.2/bits/basic_string.h
....... /usr/lib/gcc/x86_64-redhat-linux/4.7.2/../../../../include/c++/4.7.2/bits/basic_string.tcc
...... /usr/lib/gcc/x86_64-redhat-linux/4.7.2/../../../../include/c++/4.7.2/bits/locale_classes.tcc
.... /usr/lib/gcc/x86_64-redhat-linux/4.7.2/../../../../include/c++/4.7.2/streambuf
..... /usr/lib/gcc/x86_64-redhat-linux/4.7.2/../../../../include/c++/4.7.2/bits/streambuf.tcc
.... /usr/lib/gcc/x86_64-redhat-linux/4.7.2/../../../../include/c++/4.7.2/bits/basic_ios.h
..... /usr/lib/gcc/x86_64-redhat-linux/4.7.2/../../../../include/c++/4.7.2/bits/locale_facets.h
...... /usr/lib/gcc/x86_64-redhat-linux/4.7.2/../../../../include/c++/4.7.2/cwctype
....... /usr/include/wctype.h
........ /usr/include/wchar.h
...... /usr/lib/gcc/x86_64-redhat-linux/4.7.2/../../../../include/c++/4.7.2/cctype
...... /usr/lib/gcc/x86_64-redhat-linux/4.7.2/../../../../include/c++/4.7.2/x86_64-redhat-linux/bits/ctype_base.h
...... /usr/lib/gcc/x86_64-redhat-linux/4.7.2/../../../../include/c++/4.7.2/bits/streambuf_iterator.h
...... /usr/lib/gcc/x86_64-redhat-linux/4.7.2/../../../../include/c++/4.7.2/x86_64-redhat-linux/bits/ctype_inline.h
...... /usr/lib/gcc/x86_64-redhat-linux/4.7.2/../../../../include/c++/4.7.2/bits/locale_facets.tcc
..... /usr/lib/gcc/x86_64-redhat-linux/4.7.2/../../../../include/c++/4.7.2/bits/basic_ios.tcc
... /usr/lib/gcc/x86_64-redhat-linux/4.7.2/../../../../include/c++/4.7.2/bits/ostream.tcc
.. /usr/lib/gcc/x86_64-redhat-linux/4.7.2/../../../../include/c++/4.7.2/istream
... /usr/lib/gcc/x86_64-redhat-linux/4.7.2/../../../../include/c++/4.7.2/bits/istream.tcc
Multiple include guards may be useful for:
/usr/include/bits/byteswap.h
/usr/include/bits/endian.h
/usr/include/bits/locale.h
/usr/include/bits/sched.h
/usr/include/bits/time.h
/usr/include/bits/typesizes.h
/usr/include/gnu/stubs-64.h
/usr/include/gnu/stubs.h
/usr/lib/gcc/x86_64-redhat-linux/4.7.2/../../../../include/c++/4.7.2/clocale
/usr/lib/gcc/x86_64-redhat-linux/4.7.2/../../../../include/c++/4.7.2/cwctype
/usr/lib/gcc/x86_64-redhat-linux/4.7.2/../../../../include/c++/4.7.2/x86_64-redhat-linux/bits/ctype_base.h
/usr/lib/gcc/x86_64-redhat-linux/4.7.2/../../../../include/c++/4.7.2/x86_64-redhat-linux/bits/ctype_inline.h
g++ -Wall -Winvalid-pch -H -g -Wextra -Wall -c /home/pawel/Pulpit/test/precompiled_test/main.cpp -o obj/debug/main.cpp.o
! /home/pawel/Pulpit/test/precompiled_test/all.h.gch
/home/pawel/Pulpit/test/precompiled_test/main.cpp
g++ -o precompiled_test obj/debug/main.cpp.o
Output size is 17,41 KB
Process terminated with status 0 (0 minute(s), 1 second(s))
0 error(s), 1 warning(s) (0 minute(s), 1 second(s))
all.h was compiled only once.
For example file "precompiled.hpp" is pre-compiled to "precompiled.h.gch", but gcc expected "precompiled.hpp.gch", see here: http://gcc.gnu.org/onlinedocs/gcc/Precompiled-Headers.html
I know that precompiled header extension is replaced with extension setted in Compiler->Other settings -> Advanced opts -> Others, but as you can read in gcc manual:
The name searched for is the name specified in the #include with ‘.gch’ appended. If the precompiled header file can't be used, it is ignored.
There's no need to remove original extension, only postfix ".gch" should be added.
...
Just some comments because I've been running into the same issue some time ago.
1) gcc requires to append '.gch' to the original header filename.
2) the current C::B implementation replaces the original header extension with 'h.gch' (default), see [1]. This will work as long as the original header extension is '.h'
3) setting the global compiler option (Advanced Options) to something else, e.g 'hpp.gch' will require all projects to use '.hpp' as precompiled headers.
4) because of (1), the global option is useless anyway
Conclusion: C::B has to be fixed ;D
- osdt
[1] sdk\projectfile.cpp::190
if (project->GetModeForPCH() == pchSourceFile)
fname.Assign(relativeFilename);
fname.SetExt(compiler->GetSwitches().PCHExtension);
@p2rkw and osdt:
Do either of you compile Code::Blocks yourself?
I am a C Programmer, who builds CB for myself on Windows 7 32-bit.
I have created a patch that I am doing the minimal level of testing for CB under Windows.
It will take a while, since my PC is really slow because I am compiling wxWidgets trunk right now.
I did only a tiny bit of testing on this patch it needs much more testing before I could recommend it be applied to CB trunk.
Edit: Updated patch to make it work more like the 12.11 version of CB; it now errors out when doing PCH "in directory along side header".
Edit2: Turns out 2 of the PCH methods do NOT work (in the same folder at the same time) since the PCH filename is the same as the PCH foldername; please remember to delete the PCH from one method before testing another in the same folder.
Index: src/sdk/projectfile.cpp
===================================================================
--- src/sdk/projectfile.cpp (revision 8942)
+++ src/sdk/projectfile.cpp (working copy)
@@ -186,9 +186,14 @@
if (compiler && compiler->GetSwitches().supportsPCH)
{
// PCHs are always using the extended name mode (at least for GCC)
- // the extension is set to "h.gch"
+ // the extension is set to "h.gch" for .h files.
if (project->GetModeForPCH() == pchSourceFile)
fname.Assign(relativeFilename);
+ if (fname.HasExt())
+ {
+ // Make the current file ext. part of the filename
+ fname.SetName(fname.GetName() + _T('.') + fname.GetExt());
+ }
fname.SetExt(compiler->GetSwitches().PCHExtension);
m_ObjName = fname.GetFullPath();
}
@@ -382,7 +387,7 @@
wxFileName fn(source_file_native);
object_file_native = fn.GetPath(wxPATH_GET_VOLUME | wxPATH_GET_SEPARATOR) +
- fn.GetName() + _T('.') + compiler->GetSwitches().PCHExtension +
+ fn.GetName() + _T('.') + fn.GetExt() + _T('.') + compiler->GetSwitches().PCHExtension +
wxFILE_SEP_PATH +
new_gch;
object_file_flat_native = object_file_native;
Index: src/sdk/compiler.cpp
===================================================================
--- src/sdk/compiler.cpp (revision 8942)
+++ src/sdk/compiler.cpp (working copy)
@@ -65,7 +65,7 @@
linkerNeedsLibExtension = false;
linkerNeedsPathResolved = false;
supportsPCH = true;
- PCHExtension = _T("h.gch");
+ PCHExtension = _T("gch");
UseFlatObjects = false;
UseFullSourcePaths = false;
Use83Paths = false;
Index: src/plugins/compilergcc/resources/compilers/options_gcc.xml
===================================================================
--- src/plugins/compilergcc/resources/compilers/options_gcc.xml (revision 8942)
+++ src/plugins/compilergcc/resources/compilers/options_gcc.xml (working copy)
@@ -35,7 +35,7 @@
<Switch name="linkerNeedsLibPrefix" value="false"/>
<Switch name="linkerNeedsLibExtension" value="false"/>
<Switch name="supportsPCH" value="true"/>
- <Switch name="PCHExtension" value="h.gch"/>
+ <Switch name="PCHExtension" value="gch"/>
<Switch name="UseFullSourcePaths" value="true"/>
<!-- Summary of GCC options: http://gcc.gnu.org/onlinedocs/gcc/Option-Summary.html -->
Index: src/plugins/compilergcc/resources/advanced_compiler_options.xrc
===================================================================
--- src/plugins/compilergcc/resources/advanced_compiler_options.xrc (revision 8942)
+++ src/plugins/compilergcc/resources/advanced_compiler_options.xrc (working copy)
@@ -599,7 +599,7 @@
</object>
<object class="sizeritem">
<object class="wxStaticText" name="ID_STATICTEXT35">
- <label>PCH extension (e.g. h.gch)</label>
+ <label>PCH extension (e.g. gch)</label>
</object>
<flag>wxTOP|wxALIGN_LEFT|wxALIGN_CENTER_VERTICAL</flag>
<border>4</border>
Tim S.