[CMake] Possiblity to speedup the build by compiling multiple files in one compiler invocation

Alexander Neundorf a.neundorf-work at gmx.net
Tue Apr 26 15:58:53 EDT 2011


On Tuesday 26 April 2011, Martin Nielsen wrote:
> Hi,
>
> I have been asked to look into the possibilities of compiling multiple
> files in one invocation of the compiler like:
>
> armcc.exe ... file1.c file2.c ... fileN.c -o mylib.lib
>
> The cross compiler we are using requires a license in order to compile the
> file. It is a network floating license mechanism and the majority of the
> time it take to build the code is spent on acquiring the license. Parallel
> build is sadly not an option either since it just requests multiple
> licenses and we quickly run out.
>
> I was wondering if CMake could be directed to somehow do this? or it would
> break some dependency between the source files and the generation of the
> library.
>
> I suspect it isn't possible but would like to confirm this or explore other
> ideas on how to get around this problem.

In KDE we have an option KDE4_ENABLE_FINAL.
If this is set to TRUE, then for each binary a cpp-file is generated, which 
has #include "file.cpp" statements for each of the original source files, and 
then this one file, which then contains basically the whole source code, is 
compiled at once.

You can search for "enable_final" e.g. here:
http://websvn.kde.org/branches/KDE/4.5/kdelibs/cmake/modules/KDE4Macros.cmake?revision=1143427&view=markup

This is transparent for the user.
If he uses kde4_add_executable(foo a.cpp b.cpp main.cpp)
and turns the option on, then the all-in-one file is created automatically and 
built.

Alex


More information about the CMake mailing list