Custom-Symbolic-and-Byproduct.cmake 1022 B

1234567891011121314151617181920212223242526272829
  1. add_custom_command(
  2. OUTPUT gen-byproduct gen-byproduct-stamp
  3. BYPRODUCTS byproduct
  4. COMMAND ${CMAKE_COMMAND} -E touch gen-byproduct-stamp
  5. COMMAND ${CMAKE_COMMAND} -E copy_if_different gen-byproduct-stamp byproduct
  6. )
  7. set_property(SOURCE gen-byproduct PROPERTY SYMBOLIC 1)
  8. add_custom_target(produce DEPENDS gen-byproduct)
  9. add_custom_command(
  10. OUTPUT use-byproduct
  11. DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/byproduct
  12. COMMAND ${CMAKE_COMMAND} -E sleep 1.125 # workaround buggy filesystem timestamps
  13. COMMAND ${CMAKE_COMMAND} -E touch use-byproduct
  14. )
  15. add_custom_target(drive ALL DEPENDS use-byproduct)
  16. add_dependencies(drive produce)
  17. file(GENERATE OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/check-$<LOWER_CASE:$<CONFIG>>.cmake CONTENT "
  18. if (check_step EQUAL 1)
  19. set(check_pairs
  20. \"${CMAKE_CURRENT_BINARY_DIR}/use-byproduct|${CMAKE_CURRENT_BINARY_DIR}/gen-byproduct-stamp\"
  21. )
  22. else()
  23. set(check_pairs
  24. \"${CMAKE_CURRENT_BINARY_DIR}/gen-byproduct-stamp|${CMAKE_CURRENT_BINARY_DIR}/use-byproduct\"
  25. )
  26. endif()
  27. ")