Sie können etwas verwenden wie:
add_custom_target(clean-cmake-files
COMMAND ${CMAKE_COMMAND} -P clean-all.cmake
)
// clean-all.cmake
set(cmake_generated ${CMAKE_BINARY_DIR}/CMakeCache.txt
${CMAKE_BINARY_DIR}/cmake_install.cmake
${CMAKE_BINARY_DIR}/Makefile
${CMAKE_BINARY_DIR}/CMakeFiles
)
foreach(file ${cmake_generated})
if (EXISTS ${file})
file(REMOVE_RECURSE ${file})
endif()
endforeach(file)
Normalerweise erstelle ich einen "make clean-all"-Befehl und füge einen Aufruf von "make clean" zu dem vorherigen Beispiel hinzu:
add_custom_target(clean-all
COMMAND ${CMAKE_BUILD_TOOL} clean
COMMAND ${CMAKE_COMMAND} -P clean-all.cmake
)
Versuchen Sie nicht, das "saubere" Ziel als Abhängigkeit hinzuzufügen:
add_custom_target(clean-all
COMMAND ${CMAKE_COMMAND} -P clean-all.cmake
DEPENDS clean
)
Denn "clean" ist kein echtes Ziel in CMake und das funktioniert nicht.
Außerdem sollten Sie diese "clean-cmake-files" nicht als Abhängigkeit von irgendetwas verwenden:
add_custom_target(clean-all
COMMAND ${CMAKE_BUILD_TOOL} clean
DEPENDS clean-cmake-files
)
Denn wenn Sie das tun, werden alle CMake-Dateien gelöscht, bevor clean-all fertig ist, und make gibt einen Fehler aus, indem es "CMakeFiles/clean-all.dir/build.make" sucht. Infolgedessen können Sie den Befehl clean-all nicht vor "anything" in irgendeinem Kontext verwenden:
add_custom_target(clean-all
COMMAND ${CMAKE_BUILD_TOOL} clean
COMMAND ${CMAKE_COMMAND} -P clean-all.cmake
)
Auch das funktioniert nicht.