[CMake] Order of operations in CMakeLists.txt file?
Hendrik Sattler
post at hendrik-sattler.de
Fri Dec 18 16:09:06 EST 2009
Am Freitag 18 Dezember 2009 19:34:12 schrieb Eric LaFranchi:
> > use
> > project(test NONE)
> > to not enable any language. Then CMAKE_SYSTEM_NAME should be defined.
> > OTOH, you may want to think again about your approach of doing things.
> > It makes it impossible to change compilers on a platform without
> > changing the CMakeList.txt file. What exactly is your use-case for the
> > above stuff?
> >
> > HS
>
> We build on multiple platforms and some of the platforms have more than
> one C/C++ compiler installed. In the CMakeLists.txt we set the compiler
> and flags for each platform by switching on the platform based on
> CMAKE_SYSTEM_NAME. Can you suggest other mechanisms for doing this type
> of operation?
You have several options:
1.
before calling cmake, include a set of environment variables that are
recognized by cmake to configure for that toolchain. This can be the same name
on each architecture, e.g.:
export CC=cc1
export CPPFLAGS=-DFOO_X
export CFLAGS=-cc1flag_a
bash$ source /some/path/default-toolchain.sh
bash$ cmake ../myproject
2.
use a toolchain specific wrapper for cmake. Like for (1), this script can have
the same name on each platform, e.g.
#!/bin/sh
exec cmake -DCMAKE_C_COMPILER=cc1 "$@"
3.
a combination of (1) and (2)
The good thing: (1) is already the default use case of cmake when using
MSVC7/8/9/10. Additionally, keeping this information out of the CMakeLists.txt
scales better, especially when you want to use different compilers for one
platform. The flags to make the software compile for a specific compiler or
platform still belongs to the CMakeLists.txt, though.
HS
More information about the CMake
mailing list