enable_language(C) set(CMAKE_CROSSCOMPILING 1) # Executable: Return error code different from 0 add_executable(generated_exe_emulator_expected simple_src_exiterror.c) get_property(emulator TARGET generated_exe_emulator_expected PROPERTY CROSSCOMPILING_EMULATOR) set_property(TARGET generated_exe_emulator_expected PROPERTY CROSSCOMPILING_EMULATOR "$<1:${emulator}>") # Executable: Return error code equal to 0 add_executable(generated_exe_emulator_unexpected emulator_unexpected.c) # Place the executable in a predictable location. set_property(TARGET generated_exe_emulator_unexpected PROPERTY RUNTIME_OUTPUT_DIRECTORY $<1:${CMAKE_CURRENT_BINARY_DIR}>) # Executable: Imported version of above. Fake the imported target to use the above. add_executable(generated_exe_emulator_unexpected_imported IMPORTED) set_property(TARGET generated_exe_emulator_unexpected_imported PROPERTY IMPORTED_LOCATION "${CMAKE_CURRENT_BINARY_DIR}/generated_exe_emulator_unexpected${CMAKE_EXECUTABLE_SUFFIX}") add_dependencies(generated_exe_emulator_unexpected_imported generated_exe_emulator_unexpected) # DoesNotUseEmulator add_custom_command(OUTPUT output1 COMMAND ${CMAKE_COMMAND} -E touch ${CMAKE_CURRENT_BINARY_DIR}/output1) # DoesNotUseEmulator: The command will fail if emulator is prepended add_custom_command(OUTPUT output2 COMMAND ${CMAKE_COMMAND} -E echo "$" COMMAND ${CMAKE_COMMAND} -E touch ${CMAKE_CURRENT_BINARY_DIR}/output2 DEPENDS generated_exe_emulator_unexpected) # DoesNotUseEmulator: The command will fail if emulator is prepended add_custom_command(OUTPUT output3 COMMAND ${CMAKE_COMMAND} -E echo generated_exe_emulator_unexpected COMMAND $ COMMAND ${CMAKE_COMMAND} -E touch ${CMAKE_CURRENT_BINARY_DIR}/output3 DEPENDS generated_exe_emulator_unexpected) # DoesNotUseEmulator: The command will fail if emulator is prepended add_custom_command(OUTPUT outputImp COMMAND ${CMAKE_COMMAND} -E echo generated_exe_emulator_unexpected_imported COMMAND generated_exe_emulator_unexpected_imported COMMAND ${CMAKE_COMMAND} -E touch ${CMAKE_CURRENT_BINARY_DIR}/outputImp ) # UsesEmulator: The command only succeeds if the emulator is prepended # to the command. add_custom_command(OUTPUT output4 COMMAND ${CMAKE_COMMAND} -E echo generated_exe_emulator_expected COMMAND generated_exe_emulator_expected COMMAND ${CMAKE_COMMAND} -E touch ${CMAKE_CURRENT_BINARY_DIR}/output4 DEPENDS generated_exe_emulator_expected) # Use locally-built emulator. add_executable(local_emulator ../pseudo_emulator.c) add_executable(use_emulator_local simple_src_exiterror.c) set_property(TARGET use_emulator_local PROPERTY CROSSCOMPILING_EMULATOR "$") add_dependencies(use_emulator_local local_emulator) add_custom_command(OUTPUT output5 COMMAND ${CMAKE_COMMAND} -E echo use_emulator_local COMMAND use_emulator_local COMMAND ${CMAKE_COMMAND} -E touch ${CMAKE_CURRENT_BINARY_DIR}/output5 DEPENDS use_emulator_local) add_custom_target(ensure_build ALL SOURCES ${CMAKE_CURRENT_BINARY_DIR}/output1 ${CMAKE_CURRENT_BINARY_DIR}/output2 ${CMAKE_CURRENT_BINARY_DIR}/output3 ${CMAKE_CURRENT_BINARY_DIR}/outputImp ${CMAKE_CURRENT_BINARY_DIR}/output4 ${CMAKE_CURRENT_BINARY_DIR}/output5 )