| # Distributed under the OSI-approved BSD 3-Clause License. See accompanying |
| # file Copyright.txt or https://cmake.org/licensing for details. |
| |
| cmake_minimum_required(VERSION 3.12 FATAL_ERROR) |
| |
| project(test C) |
| |
| if(CMAKE_C_COMPILER_ID STREQUAL "GHS") |
| add_link_options("-non_shared") |
| endif() |
| |
| add_library(lib1 lib1.c) |
| |
| set(TEST_MISSING_TARGET_SRC 0) |
| set(TEST_MISSING_TARGET_DEP 0) |
| set(TEST_MISSING_DEP 0) |
| set(TEST_DEP_CYCLE 0) |
| |
| add_executable(exe1 exe1.c) |
| target_link_libraries(exe1 lib1) |
| |
| add_custom_target(target_cmd ALL |
| COMMAND ${CMAKE_COMMAND} -E echo "target_cmd" > target_cmd |
| COMMAND ${CMAKE_COMMAND} -E echo "target_cmd_extra" > target_cmd_extra.txt |
| BYPRODUCTS target_cmd target_cmd_extra.txt |
| COMMENT "CT: Processing target_cmd") |
| |
| add_custom_command(TARGET target_cmd PRE_BUILD |
| COMMAND ${CMAKE_COMMAND} -E echo "target_cmd_prebuild" > target_cmd_prebuild.txt |
| BYPRODUCTS target_cmd_prebuild.txt |
| COMMENT "CT: Processing target_cmd_prebuild") |
| #event does not run for custom targets |
| add_custom_command(TARGET target_cmd PRE_LINK |
| COMMAND ${CMAKE_COMMAND} -E echo "executing target_cmd_prelink commands" |
| COMMAND ${CMAKE_COMMAND} -E echo "target_cmd_prelink" > target_cmd_prelink.txt |
| BYPRODUCTS target_cmd_prelink.txt |
| COMMENT "CT: Processing target_cmd_prelink") |
| add_custom_command(TARGET target_cmd POST_BUILD |
| COMMAND ${CMAKE_COMMAND} -E echo "executing target_cmd_postbuild commands" |
| COMMAND ${CMAKE_COMMAND} -E echo "target_cmd_postbuild" > target_cmd_postbuild.txt |
| BYPRODUCTS target_cmd_postbuild.txt |
| COMMENT "CT: Processing target_cmd_postbuild") |
| |
| add_custom_target(target_empty ALL |
| COMMENT "CT: Processing target_empty") |
| |
| add_custom_command(TARGET target_empty PRE_BUILD |
| COMMAND ${CMAKE_COMMAND} -E echo "target_empty_prebuild" > target_empty_prebuild.txt |
| BYPRODUCTS target_empty_prebuild.txt |
| COMMENT "CT: Processing target_empty_prebuild") |
| add_custom_command(TARGET target_empty POST_BUILD |
| COMMAND ${CMAKE_COMMAND} -E echo "target_empty_postbuild" > target_empty_postbuild.txt |
| BYPRODUCTS target_empty_postbuild.txt |
| COMMENT "CT: Processing target_empty_postbuild") |
| |
| add_dependencies(target_cmd target_empty) |
| |
| add_custom_command( |
| OUTPUT out_of_order_dep.txt |
| COMMAND ${CMAKE_COMMAND} -E echo "out_of_order_dep" > out_of_order_dep.txt |
| COMMENT "CT: generate text file out_of_order_dep" |
| DEPENDS dependsA.txt |
| ) |
| |
| if(TEST_MISSING_TARGET_SRC) |
| set(SRC_FILE does_not_exist) |
| endif() |
| if(TEST_MISSING_TARGET_DEP) |
| set(DEP_FILE does_not_exist) |
| endif() |
| |
| add_custom_target(target_update_files |
| DEPENDS genc_do_not_list.txt ${DEP_FILE} |
| SOURCES gena.txt genb.txt another_file.c ${SRC_FILE} |
| BYPRODUCTS junkit.txt |
| COMMAND ${CMAKE_COMMAND} -E copy another_file.c junkit.txt |
| COMMENT "CT: Processing target_update_files") |
| |
| add_custom_command( |
| OUTPUT force_rebuild gena.txt genb.txt genc_do_not_list.txt |
| COMMAND ${CMAKE_COMMAND} -E copy dependsA.txt gena.txt |
| COMMAND ${CMAKE_COMMAND} -E echo "genb" > genb.txt |
| COMMAND ${CMAKE_COMMAND} -E echo "genc" > genc_do_not_list.txt |
| DEPENDS out_of_order_dep.txt dependsA.txt |
| COMMENT "CT: generate text files A, B, and C" |
| ) |
| |
| if(TEST_MISSING_DEP) |
| set(MISSING_DEP MISSING_DEP) |
| endif() |
| if(TEST_DEP_CYCLE) |
| set(DEP_CYCLE out_of_order_dep.txt) |
| endif() |
| |
| add_custom_command( |
| OUTPUT dependsA.txt |
| COMMAND ${CMAKE_COMMAND} -E echo "dependsA" > dependsA.txt |
| DEPENDS ${MISSING_DEP} ${DEP_CYCLE} another_file.c |
| COMMENT "CT: generate text file dependsA" |
| ) |
| |
| add_custom_command( |
| OUTPUT another_file.c |
| COMMAND ${CMAKE_COMMAND} -E echo "//auto-gen file" > another_file.c |
| COMMENT "CT: generate C file another_file" |
| ) |
| |
| add_dependencies(target_update_files target_empty) |