cmake_minimum_required(VERSION 3.12) project(Test LANGUAGES C) # fake launcher executable set(input_launcher_executable ${CMAKE_CURRENT_BINARY_DIR}/fake_launcher_executable) file(WRITE ${CMAKE_CURRENT_BINARY_DIR}/fake_launcher_executable "") # application and executable name set(application_target "HelloApp") set(application_name "Hello") set(executable_name "Hello") # target built in "/bin" add_executable(${application_target} hello.c) set_target_properties(${application_target} PROPERTIES OUTPUT_NAME ${executable_name} RUNTIME_OUTPUT_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/bin ) # configured launcher in "" set(configured_launcher_executable "${CMAKE_CURRENT_BINARY_DIR}/${application_name}") # create command to copy the launcher add_custom_command( DEPENDS ${input_launcher_executable} OUTPUT ${configured_launcher_executable} COMMAND ${CMAKE_COMMAND} -E copy ${input_launcher_executable} ${configured_launcher_executable} WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR} COMMENT "Configuring application launcher: ${application_name}" ) add_custom_target(Configure${application_name}Launcher ALL DEPENDS ${application_target} ${input_launcher_executable} ${configured_launcher_executable} )