[CMake] Using the -C option to cmake

David Cole david.cole at kitware.com
Fri Jun 29 09:27:02 EDT 2012


The documentation for the CMake -C command line option says:

"When cmake is first run in an empty build tree, it creates a
CMakeCache.txt file and populates it with customizable settings for
the project. This option may be used to specify a file from which to
load cache entries before the first pass through the project's cmake
listfiles. The loaded entries take priority over the project's default
values. The given file should be a CMake script containing SET
commands that use the CACHE option, not a cache-format file."

  http://cmake.org/cmake/help/v2.8.8/cmake.html#opt:-Cinitial-cache

The ONLY thing that should be in a -C file is a sequence of SET( ...
CACHE ... ) commands. Anything else is unexpected, but (unfortunately)
not strictly prohibited. We should have made it an error / mistake to
put anything BUT "set(CACHE" commands in -C files, but to do so now
would break backwards compatibility. We should probably do so now
anyhow and introduce a policy that says to make it an error to put
anything else into -C files.

So... avoid putting anything else in your Init.cmake file, and you should be ok.


HTH,
David


On Fri, Jun 29, 2012 at 8:44 AM, Christian Arnault <arnault at lal.in2p3.fr> wrote:
> Hi,
>
> I wanted to factor out some initial stuff of my CMakeLists.txt that I
> systematically include.
>
> typically I include the following lines at the beginning of all my
> CMakeLists.txt:
>
> cmake_minimum_required(VERSION 2.8)
> function (AA)
>   message ("calling AA")
> endfunction()
>
> AA()
>
> Then I thought by using the -C option as follows:
>
>> cmake --build=. -C %CMTROOT%\Init.cmake ..\CMakeLists.txt
>
> with Init.cmake file containing
>
> function(AA)
>   message("calling aaaa")
> endfunction()
>
> This would be equivalent.
>
> Apparently this is not the case. In particular, the function definitions are
> not transmitted by this mechanism
>
> loading initial cache file ...\Init.cmake
>
> ... the functions defined in Init.cmake are not recognized
>
> Of course I could 'manually' include my module in all CMakeLists.txt but ...
>
> Can someone explain why?
>
> Or, how could I obtain what I need?
>
>
>
> Thanks for any hint
>
> Regards
> Christian
>
> --
> --------------------------------------------
> | Christian Arnault                        |
> | LAL Bat 200 pièce 03a                    |
> | 91405 Orsay CEDEX                        |
> | phone   : (33) 1 64 46 84 24             |
> | gsm     : (33) 6 77 27 62 30             |
> | fax     : (33) 1 69 07 94 04             |
> | e-mail  : christian.arnault at lal.in2p3.fr |
> --------------------------------------------
>
>
> --
>
> 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://www.cmake.org/mailman/listinfo/cmake


More information about the CMake mailing list