[CMake] Problem with custom command

Robert Dailey rcdailey.lists at gmail.com
Tue Mar 12 17:00:32 EDT 2013


On second thought I think I realize the problem here... I'm not
specifying the OUTPUT file as a dependency in add_library(), I'm only
specifying the SOURCE file (listed under DEPENDS in the custom command
call) as the source in add_library(). The output file is temporary, I
don't actually want to depend on that- - only the source.

On Tue, Mar 12, 2013 at 3:58 PM, Robert Dailey <rcdailey.lists at gmail.com> wrote:
> I'm adding a custom command to a target created via add_library().
> here is the function I call to create the custom command:
>
>
> function( define_data target_name output_subdir )
>     set( data_files ${ARGN} )
>     set( output_dir ${CMAKE_BINARY_DIR}/output/data/${output_subdir} )
>     set( copycmd ${CMAKE_COMMAND} -E copy )
>
>     foreach( d ${data_files} )
>         #get_filename_component( file ${d} NAME )
>         #set( output_file ${output_dir}/${d} )
>         #set( source_file ${CMAKE_CURRENT_SOURCE_DIR}/${d} )
>         set( output_file ${output_dir}/${d} )
>         set( source_file ${d} )
>
>         list( APPEND output_files ${output_file} )
>         list( APPEND copy_commands
>             COMMAND ${copycmd} ${source_file} ${output_file}
>         )
>     endforeach()
>
>     source_group( data FILES ${data_files} )
>
>     add_custom_command(
>         COMMENT "Copying data for target ${target_name}"
>         OUTPUT ${output_files}
>         DEPENDS ${data_files}
>         ${copy_commands}
>     )
>
>     #add_dependencies( ${target_name} ${data_target} )
> endfunction()
>
> I call this function FIRST, then afterwards I call add_library() and I
> include the data file(s) passed in as a source file to be included in
> the target. When I build that target in VS2008 I do not see any files
> copied to my output/data directory (which does not yet exist on my
> hard drive). Any idea what I'm doing wrong?
>
> How are relative/absolute paths handled here? I'm passing in relative
> paths (just the filename for current source directory) into DEPENDS.


More information about the CMake mailing list