CMakeLists.txt 1.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263
  1. PROJECT(MakeClean)
  2. SET(CMAKE_C_FLAGS "${CMAKE_ANSI_CFLAGS} ${CMAKE_C_FLAGS}")
  3. # Build the to-clean project.
  4. TRY_COMPILE(TOCLEAN_BUILT
  5. ${MakeClean_BINARY_DIR}/ToClean
  6. ${MakeClean_SOURCE_DIR}/ToClean
  7. ToClean
  8. OUTPUT_VARIABLE OUTPUT
  9. )
  10. IF(TOCLEAN_BUILT)
  11. MESSAGE(
  12. "Building ToClean succeeded with the following output:\n"
  13. "[${OUTPUT}]"
  14. )
  15. ELSE(TOCLEAN_BUILT)
  16. MESSAGE(FATAL_ERROR
  17. "Building ToClean failed with the following output:\n"
  18. "[${OUTPUT}]"
  19. )
  20. ENDIF(TOCLEAN_BUILT)
  21. # Get the set of files to check from the ToClean project.
  22. INCLUDE(${MakeClean_BINARY_DIR}/ToClean/ToCleanFiles.cmake)
  23. # Check for the existence of the files.
  24. FOREACH(f ${TOCLEAN_FILES})
  25. IF(EXISTS "${f}")
  26. ELSE(EXISTS "${f}")
  27. MESSAGE(FATAL_ERROR "File \"${f}\" does not exist!")
  28. ENDIF(EXISTS "${f}")
  29. ENDFOREACH(f)
  30. # Enable ANSI flags for the C executable.
  31. IF(CMAKE_ANSI_CFLAGS)
  32. SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${CMAKE_ANSI_CFLAGS}")
  33. ENDIF(CMAKE_ANSI_CFLAGS)
  34. # Configure an executable to check that all the files are missing.
  35. SET(CHECK_FILES)
  36. FOREACH(f ${TOCLEAN_FILES})
  37. SET(CHECK_FILES "${CHECK_FILES} \"${f}\",\n")
  38. ENDFOREACH(f)
  39. CONFIGURE_FILE(${MakeClean_SOURCE_DIR}/check_clean.c.in
  40. ${MakeClean_BINARY_DIR}/check_clean.c @ONLY IMMEDIATE)
  41. ADD_EXECUTABLE(check_clean ${MakeClean_BINARY_DIR}/check_clean.c)
  42. # After the executable builds, clean the files.
  43. ADD_CUSTOM_COMMAND(
  44. TARGET check_clean
  45. POST_BUILD
  46. COMMAND ${CMAKE_CTEST_COMMAND}
  47. ARGS --build-and-test
  48. ${MakeClean_SOURCE_DIR}/ToClean
  49. ${MakeClean_BINARY_DIR}/ToClean
  50. --build-generator ${CMAKE_GENERATOR}
  51. --build-project ToClean
  52. --build-makeprogram ${CMAKE_MAKE_PROGRAM}
  53. --build-noclean
  54. --build-target clean
  55. COMMENT "Clean the ToClean Project"
  56. )