[CMake] Separate compile flags for ASM/C compilers and lists

Alexander Neundorf a.neundorf-work at gmx.net
Sat Sep 14 04:59:47 EDT 2013


On Friday 13 September 2013, lorddoskias wrote:
> Hello list,
> 
> I have a couple of questions whose answers I couldn't find. So first
> thing's first - I have the following function which I intend to use to
> add a number of library targets:
> 
> function(build_mps_m3_lib LIBRARY_NAME C_SOURCE ASM_SOURCE CPU_TYPE)
>      set_property(SOURCE ${${C_SOURCE}} PROPERTY COMPILE_FLAGS "-g
> --cpu=${CPU_TYPE} -O0")
>      set_property(SOURCE ${${ASM_SOURCE}} PROPERTY COMPILE_FLAGS "-g
> --cpu=${CPU_TYPE} --apcs=interwork")
>      add_library(${LIBRARY_NAME}  ${${SOURCE}} ${${ASM_SOURCE}})
>      set(TARGET_DIR "mps-m3")
>      set(ASM_COMPILE_FLAGS "-g --cpu=${CPU_TYPE} --apcs=interwork")
>      #custom armasm command line
>      set(CMAKE_ASM_COMPILE_OBJECT "<CMAKE_ASM_COMPILER>
> ${ASM_COMPILE_FLAGS} <SOURCE> -o <OBJECT>")
>      #set_target_properties(${LIBRARY_NAME} PROPERTIES C_COMPILE_FLAGS
> "-g --cpu=${CPU_TYPE} -O0")
> endfunction(build_mps_m3_lib)
> 
> 
> What I want to achieve is to have clear separation between the ASM
> compiler flags and the C compiler flags. Since I'm not using the GNU
> (ergo GCC) toolchain I cannot simply set the properties on the resulting
> library target to set the COMPILE_FLAGS. Essentially what I want to
> achieve is being able to set arbitrary compile options for the C and ASM
> compiler WITHOUT both of those interfering.

In general they don't interfer.
What compiler and assembler are you using ?
Maybe you need a new "assembler dialect". Those are quite simply to do, you 
can have a look e.g. at the files containing "MASM" in their name in Modules/.
 
> My second questions: The way I pass the lists of sources is kind of ugly
> - e.g. I'm, in-essence, doing double indirection the ${${blah}} thingy.
> What would be the correct way. I tried with ${blah-list} but this skewed
> the arguments order

To get full support for keywords etc. in your own macros/functions, have a 
look at CMakeParseArguments.cmake.

Alex


More information about the CMake mailing list