[CMake] How to set platform-specific compiler-options from within CMakeFiles

Martin Apel martin.apel at simpack.de
Fri Jun 6 08:25:46 EDT 2008


Mike Jackson wrote:
> typically, the PROJECT() statement is the first line of your 
> CMakeLists.txt. Could you explain your project layout a bit more?
>
>
I found out, that CMAKE_CXX_FLAGS is set to the compound of 
$ENV{CXXFLAGS} and the platform-specific default at the time, the 
PROJECT statement is executed.
In order to preset CMAKE_CXX_FLAGS I tried to set $ENV{CXXFLAGS} from 
within the CMakeFile. Thus this setting has to be done before the 
PROJECT statement, otherwise
CMAKE_CXX_FLAGS is already set. So I tried to include an external file by
INCLUDE (${CMAKE_SYSTEM_NAME}.cmake)
before the PROJECT statement. This doesn't work, because 
${CMAKE_SYSTEM_NAME} is not set at that time.

When setting CMAKE_CXX_FLAGS after the PROJECT statement, the 
CMake-local variable is set correctly, but the cache is not updated. The 
situation I tried to achieve, was to preset
the cache variable CMAKE_CXX_FLAGS to include certain compiler flags. If 
the user looked at the cache e.g. by using ccmake, he would also see and 
be able to edit those additional flags.
By setting the flags later, you only change the CMake-local variable, 
but never the cache value, which is somewhat irritating, because the 
compile happens with other flags than can be seen using
ccmake.

Martin


More information about the CMake mailing list