Sounds awesome to me!

When can you submit a patch? :-)


On Thu, Jun 14, 2012 at 4:36 AM, Daniel Pfeifer <dan...@pfeifer-mail.de>wrote:

> Hi,
>
> In a private mailing with Dave Abrahams and Brad King I wrote a
> proposal of how I imagine PCH support should be implemented. Brad
> asked me to send it to this list for further discussion.
> Please note that even though I use present tense in the proposal,
> nothing descibed below is implemented yet.
> We have a similar implementation for PCH [1], but the interface
> differs to this proposal.
>
> [1]
> https://github.com/ryppl/ryppl/blob/develop/cmake/Modules/RypplPrecompileHeader.cmake
>
> cheers, Daniel
>
>
>
> CMakeLists.txt changes
> ----------------------
> There are new target properties PRECOMPILE_HEADER and
> PRECOMPILE_HEADER_<config>. These properties may be set to a list of
> header files:
>
> set_property(TARGET target APPEND PROPERTY PRECOMPILE_HEADER
>  <boost/spirit/karma.hpp>
>  "my/precompiled/header.h"
>  )
>
>
> changes to source files
> -----------------------
> None. All source files should be written as if there was no PCH
> support. That means that each file should include all the headers it
> requires. Nothing more, nothing less.
>
> That especially means that source files should *NOT* include an
> "all.h", "precompile.h", or "stdafx.h" file. Nothing breaks if they
> do, but it may impact compile times if precompiled headers are not
> supported.
>
>
> file(s) to precompile
> ---------------------
> Special header files that contain all the system headers may be
> created and added to the PRECOMPILE_HEADER property. However, the
> system headers may also be added directly to PRECOMPILE_HEADER.
>
> If custom files are created, it is important to note that a special
> PCH_SUPPORTED guard is *NOT* required.
>
>
> What is done behind the scenes
> ------------------------------
> CMake creates the actual header file that is going to be precompiled
> during the config step inside the current binary directory. The
> complete filename encodes the target name and the configuration (eg.
> "${CMAKE_CURRENT_BINARY_DIR}/${target}_${config}_pch.hpp") and
> contains one #include directive for each element in the
> PRECOMPILE_HEADER/PRECOMPILE_HEADER_<config> list. If the element is
> wrapped in angle brackets, it is included unmodified, otherwise the
> *absolute path* is used in double quotes. The generated header file
> for the above example may look like this:
>
> /* generated by CMake 2.8.x */
> #include <boost/spirit/karma.hpp>
> #include "/home/daniel/workspace/foo/my/precompiled/header.h"
>
>
> This header file is compiled before all object files of the target; ie
> the object files depend on the compiled header.
>
>
> MSVC specific
> -------------
> MSVC requires a source file to compile the header. This source file is
> generated by CMake alongside the header file and may be called
> <target>_pch.cpp, for example. It contains just one line: an #include
> directive that includes the configured header file.
>
> The precompiled header (pch_binary) is created by compiling the source
> file (pch_source) with "/Yc\"${pch_header}\" /Fp\"${pch_binary}\"".
>
> For the MSVC IDE, pch_binary might be "$(IntDir)/${target}.pch".
>
> All other source files are compiled with "/Yu\"${pch_header}\"
> /FI\"${pch_header}\" /Fp\"${pch_binary}\"".
>
> /Yc = create pch
> /Yu = use pch
> /FI = force include
> /Fp = name pch binary
>
>
> GCC specific
> ------------
> In GCC the pch_binary is created by compiling the header file directly
> (no extra source file is required). The pch_binary must be
> "${pch_header}.pch", there is no way to change that. Here, it pays off
> again that we generate the actual pch_header in the binary directory.
>
> The compile flags to compile the header are "-x c++-header" and the
> output file must be set with "-o ${pch_binary}"
>
> All the other source files are compiled with "-include ${pch_header}"
> (force include), it may also be a good idea to pass "-Winvalid-pch".
> --
>
> Powered by www.kitware.com
>
> Visit other Kitware open-source projects at
> http://www.kitware.com/opensource/opensource.html
>
> Please keep messages on-topic and check the CMake FAQ at:
> http://www.cmake.org/Wiki/CMake_FAQ
>
> Follow this link to subscribe/unsubscribe:
> http://public.kitware.com/cgi-bin/mailman/listinfo/cmake-developers
>
--

Powered by www.kitware.com

Visit other Kitware open-source projects at 
http://www.kitware.com/opensource/opensource.html

Please keep messages on-topic and check the CMake FAQ at: 
http://www.cmake.org/Wiki/CMake_FAQ

Follow this link to subscribe/unsubscribe:
http://public.kitware.com/cgi-bin/mailman/listinfo/cmake-developers

Reply via email to