I'm using add_excecutable to generate a .s file which I then parse to generate 
a header file. This all works fine and all the dependencies seem to be working, 
but it gets built every time, even if nothing has changed.

I have a function to generate the asm file:

function (make_asm_file source dest defs flags)
set_source_files_properties(
        ${source}
        PROPERTIES
        COMPILE_DEFINITIONS "${${defs}}"
        COMPILE_FLAGS "${${flags}} -S"
        )
add_executable (
        ${dest}
        EXCLUDE_FROM_ALL
        ${source}
        )
set_target_properties(
        ${dest}
        PROPERTIES
        OUTPUT_NAME ${dest}
        RULE_LAUNCH_LINK "sh build_tools/copier.sh ${CMAKE_BINARY_DIR} 
<OBJECTS> --"
        )
endfunction(make_asm_file)

and I invoke that, and then add a custom command to convert the .s into a .h 
like this:

make_asm_file(${input_c} ${output_s} c_defs c_flags)

add_custom_command (
        OUTPUT ${header_path}
        COMMAND ./make_header ${header_path} ${dest}
        DEPENDS ${output_s}
        )

and then I use set_source_file_properties(OBJECT_DEPENDS) to make the sources 
depend on this generated header.

Every time I get type make (even on incremental builds) I get

[  0%] Built target genassym.c.s

but I only see the custom command on a build when the header hasn't previously 
been generated, i.e.

[  1%] Generating assym.h

So my question is, what is it about this invocation of add_excecutable that 
makes it always run? Shouldn't EXCLUDE_FROM_ALL get rid of that?

cheers,
Tom
_______________________________________________
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

Reply via email to