[CMake] CMAKE_C_FLAGS and CMAKE_C_COMPILER cross compilation woe

Andreas Mohr andi at lisas.de
Tue May 14 14:55:37 EDT 2013


Hi,

On Tue, May 14, 2013 at 02:38:17PM -0400, cmake-request at cmake.org wrote:
> Date: Tue, 14 May 2013 10:02:56 -0700
> From: Thomas Taranowski <tom at baringforge.com>

> I am running into a situation when cross compiling where I cannot get
> cmake to emit the write CFLAGS for my cross-compilation toolchain
> correctly.
> 
> If I force the C compiler, via the CMakeForceCompiler mechanism, the
> CMAKE_C_FLAGS do not get passed to gcc during the build.
> 
> Example make VERBOSE=true snapshot.  Note there are no CFLAGS, only
> include paths:
> /usr/local/msp430/bin/msp430-gcc
> -I/home/tom/src/t3gtb.1/t3_i2c_mm/public
> -I/home/tom/src/t3gtb.1/t3_i2c_mm/src/msp430
> -I/home/tom/src/t3gtb.1/t3_i2c_mm/src    -o
> CMakeFiles/t3_i2c_mm_support.dir/src/msp430/t3g_bsp.c.obj   -c
> /home/tom/src/t3gtb.1/t3_i2c_mm/src/msp430/t3g_bsp.c
> 
> 
> Now, I can eliminate the need to force by passing in a -mmcu option
> (required for this processor to find the correct link map), which
> allows the TRY_COMPILE process to pass.  So I set:
> 
> set(CMAKE_C_COMPILER ${CROSS_COMPILE}gcc ${CMAKE_C_FLAGS})
> 
> This works to allow cmake to do it's thing and figure out what it
> needs to about the toolchain.  However, it seems as though the cflags
> is now fixed, because the include_directories directive has absolutely
> no effect.  It's as if cmake thinks that if I pass in some additional
> flags to the CMAKE_C_COMPILER, that it can no longer append anything
> to cflags.

This is the usual CMAKE_<lang>_FOO per-LANGUAGE mechanism
(for pre-defined "languages" and custom-setup ones), e.g. CMAKE_C_COMPILER,
..._LINKER etc. variables.


I believe you're missing the usual (and usually existing!) *extension* parts
within these expressions, which would be the <...> parts (<FLAGS> etc.).

For details, see all the Platform setup modules within CMake's
pre-installed modules, i.e. INSTALL_PREFIX/share/cmake-VER/Modules/Platform/ ,
since *this* is where the game gets played, i.e. where all the magic
happens, thus that is the authoritative place to start investigating about
custom platform setup questions.

HTH,

Andreas Mohr


More information about the CMake mailing list