cmake_minimum_required (VERSION 2.6) project(MakeClean) # Build the to-clean project. try_compile(TOCLEAN_BUILT ${MakeClean_BINARY_DIR}/ToClean ${MakeClean_SOURCE_DIR}/ToClean ToClean OUTPUT_VARIABLE OUTPUT ) if(TOCLEAN_BUILT) message( "Building ToClean succeeded with the following output:\n" "[${OUTPUT}]" ) else() message(FATAL_ERROR "Building ToClean failed with the following output:\n" "[${OUTPUT}]" ) endif() # Get the set of files to check from the ToClean project. include(${MakeClean_BINARY_DIR}/ToClean/ToCleanFiles.cmake) # Check for the existence of the files. foreach(f ${TOCLEAN_FILES}) if(EXISTS "${f}") else() message(FATAL_ERROR "File \"${f}\" does not exist!") endif() endforeach() # Configure an executable to check that all the files are missing. set(CHECK_FILES) foreach(f ${TOCLEAN_FILES}) set(CHECK_FILES "${CHECK_FILES} \"${f}\",\n") endforeach() configure_file(${MakeClean_SOURCE_DIR}/check_clean.c.in ${MakeClean_BINARY_DIR}/check_clean.c @ONLY IMMEDIATE) add_executable(check_clean ${MakeClean_BINARY_DIR}/check_clean.c) # After the executable builds, clean the files. add_custom_command( TARGET check_clean POST_BUILD COMMAND ${CMAKE_CTEST_COMMAND} ARGS --build-and-test ${MakeClean_SOURCE_DIR}/ToClean ${MakeClean_BINARY_DIR}/ToClean --build-generator ${CMAKE_GENERATOR} --build-project ToClean --build-makeprogram ${CMAKE_MAKE_PROGRAM} --build-noclean --build-target clean COMMENT "Clean the ToClean Project" )