[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