CMakeLists.txt 1.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142
  1. cmake_minimum_required(VERSION 2.6)
  2. project(ToClean)
  3. # Build a simple project.
  4. add_executable(toclean toclean.cxx)
  5. # List some build-time-generated files.
  6. set(TOCLEAN_FILES ${TOCLEAN_FILES}
  7. "${ToClean_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/toclean.dir/toclean.cxx${CMAKE_CXX_OUTPUT_EXTENSION}")
  8. # Create a file that must be registered for cleaning.
  9. file(WRITE "${ToClean_BINARY_DIR}/Registered.txt"
  10. "File registered for cleaning.\n")
  11. set_directory_properties(PROPERTIES
  12. ADDITIONAL_MAKE_CLEAN_FILES "${ToClean_BINARY_DIR}/Registered.txt")
  13. set(TOCLEAN_FILES ${TOCLEAN_FILES} "${ToClean_BINARY_DIR}/Registered.txt")
  14. # Create a custom command whose output should be cleaned.
  15. add_custom_command(OUTPUT ${ToClean_BINARY_DIR}/generated.txt
  16. DEPENDS ${ToClean_SOURCE_DIR}/toclean.cxx
  17. COMMAND ${CMAKE_COMMAND}
  18. ARGS -E copy ${ToClean_SOURCE_DIR}/toclean.cxx
  19. ${ToClean_BINARY_DIR}/generated.txt
  20. )
  21. add_custom_target(generate ALL DEPENDS ${ToClean_BINARY_DIR}/generated.txt)
  22. set(TOCLEAN_FILES ${TOCLEAN_FILES} "${ToClean_BINARY_DIR}/generated.txt")
  23. # Create a custom command whose output should be cleaned, but whose name
  24. # is not known until generate-time
  25. set(copied_exe "$<TARGET_FILE_DIR:toclean>/toclean_copy${CMAKE_EXECUTABLE_SUFFIX}")
  26. add_custom_command(TARGET toclean POST_BUILD
  27. COMMAND ${CMAKE_COMMAND}
  28. ARGS -E copy $<TARGET_FILE:toclean>
  29. ${copied_exe}
  30. )
  31. set_property(DIRECTORY APPEND PROPERTY
  32. ADDITIONAL_MAKE_CLEAN_FILES ${copied_exe})
  33. list(APPEND TOCLEAN_FILES "${ToClean_BINARY_DIR}/toclean_copy${CMAKE_EXECUTABLE_SUFFIX}")
  34. # Configure a file listing these build-time-generated files.
  35. configure_file(${ToClean_SOURCE_DIR}/ToCleanFiles.cmake.in
  36. ${ToClean_BINARY_DIR}/ToCleanFiles.cmake @ONLY)