[CMake] Custom object files for intermediate build products

Tom Birch tbirch at apple.com
Fri Jun 25 15:01:27 EDT 2010


On Jun 24, 2010, at 2:40 AM, Michael Hertling wrote:

> On 06/24/2010 08:29 AM, Tom Birch wrote:
>> Hi,
>> 
>> I'm trying to invoke the C compiler in cmake as would happen with an add_excecutable command, but I don't want to generate an object file. Basically I have a script which generates a c file, I want to compile that file in the environment I've set up, while passing the -S flag. I then want to run that .s file through another script to generate a header which will then be a dependency of my main executable. Doing the scripts is easy with add_custom_target, and I'm sure I could write all the magic to generate the full compile command line myself, but isn't there some elegant way to generate the a single compiler invocation that doesn't result in a dylib or a binary, that works in a similar way to add_excecutable?
> 
> If you are using a Makefile generator I could offer this approach:
> 
> Place the following file "cps" as executable in CMAKE_SOURCE_DIR:
> 
> #!/bin/sh
> d=$1; shift
> while [ "$1" != "--" ]; do
>    cp $1 $d/$(basename $1 .o).s; shift
> done
> 
> Now, look at the following CMakeLists.txt:
> 
> CMAKE_MINIMUM_REQUIRED(VERSION 2.8 FATAL_ERROR)
> PROJECT(CPS C)
> FILE(WRITE f1.c "void f1(void){}\n")
> FILE(WRITE f2.c "void f2(void){}\n")
> FILE(WRITE f3.c "void f3(void){}\n")
> ADD_EXECUTABLE(f f1.c f2.c f3.c)
> SET_TARGET_PROPERTIES(f PROPERTIES
>    COMPILE_FLAGS "-S"
>    RULE_LAUNCH_LINK
>    "${CMAKE_SOURCE_DIR}/cps ${CMAKE_BINARY_DIR} <OBJECTS> --"
> )
> 
> This uses the above-mentioned "cps" as a launch script for linking the
> target "f", but "cps" just copies the object files - delimited by "--"
> - to the directory specified as the first argument, and of course, the
> objects are in fact the assembler code files generated from the sources
> by the "-S" flag which is imposed on the same target. Effectively, this
> means you have a target producing ".s" files instead of an executable,
> and everything else should be business as usual.

Yep, that was exactly what I needed, thanks!

Tom

> 
> 'hope that helps.
> 
> Regards,
> 
> Michael
> 
> P.S.: The source file property GENERATED is useful in this context.
> _______________________________________________
> Powered by www.kitware.com
> 
> Visit other Kitware open-source projects at http://www.kitware.com/opensource/opensource.html
> 
> Please keep messages on-topic and check the CMake FAQ at: http://www.cmake.org/Wiki/CMake_FAQ
> 
> Follow this link to subscribe/unsubscribe:
> http://www.cmake.org/mailman/listinfo/cmake



More information about the CMake mailing list