[CMake] Copy a input file from src folder to EXECUTABLE_OUTPUT_PATH

Michael Wild themiwi at gmail.com
Mon Dec 12 10:36:41 EST 2011


On 12/12/2011 04:29 PM, Totte Karlsson wrote:
>>
>> At build time:
>>
> 
>> ADD_CUSTOM_COMMAND(TARGET OneOfYourExecutables
>>      COMMAND ${CMAKE_COMMAND} -E copy_if_different
>>          <path>/<to>/input.txt $<TARGET_FILE_DIR:OneOfYourExecutables>)
>> ADD_CUSTOM_COMMAND(TARGET AnotherExecutable
>>      COMMAND ${CMAKE_COMMAND} -E copy_if_different
>>          <path>/<to>/input.txt $<TARGET_FILE_DIR:AnotherExecutable>)
>>
>> Personally, I'd prefer the latter as it's clean and quite flexible.
> 
> I decided to use
> ADD_CUSTOM_COMMAND(
> TARGET ${PROJECT_NAME} POST_BUILD COMMAND ${CMAKE_COMMAND} -E
> copy_if_different
>         "P:/mtkLib/Examples/${PROJECT_NAME}/ball.mtk"
> $<TARGET_FILE_DIR:${PROJECT_NAME}>
> )
> 
> It works fine. But I have a few more questions:
> 1) How can I get rid of the absolute path in the expression for the
> source file?

Use the ${PROJECT_SOURCE_DIR} variable. It points to the directory
containing the CMakeLists.txt file with the last project() call.

> 2) when doing make clean, the file in the target file dir is not
> deleted. How to add it to 'clean'?

See the ADDITIONAL_MAKE_CLEAN_FILES directory property. However, this is
going to be somewhat tricky since you are using $<TARGET_FILE_DIR:...>
in your custom command, and AFAIK the set_directory_property command is
not aware of this notation. Do you really need ball.mtk to be in the
same directory as your output file?

Michael


More information about the CMake mailing list