正如make clean删除makefile生成的所有文件一样,我想对CMake做同样的事情。我经常发现自己手动地在目录中删除像cmake_install这样的文件。cmake和CMakeCache.txt,以及CMakeFiles文件夹。

是否有像cmake clean这样的命令来自动删除所有这些文件?理想情况下,这应该遵循当前目录的CMakeLists.txt文件中定义的递归结构。


当前回答

创建一个临时构建目录,例如build_cmake。因此所有的构建文件都在这个文件夹中。

然后在主CMake文件中添加以下命令。

add_custom_target(clean-all
    rm -rf *
)

因此,在编译时

cmake ..

和清洁做:

make clean-all

其他回答

在Git无处不在的今天,你可能会忘记CMake,而使用Git clean -d -f -x,这将删除所有不在源代码控制下的文件。

清除cmake构建输出:

命令行:

$ rm -rf [folder that you builded the project]/
$ cmake --build .

Cmake:

cmake --build . --target clean

这是我用的。它被包装在一个函数中,它是跨平台的,它演示了如何找到匹配的文件名或文件夹名,以防你想做任何简单的调整。这个函数在我每次构建脚本时都运行,并且完美地满足了我的需求。

function(DELETE_CACHE)
    if(CMAKE_HOST_WIN32)
        execute_process(COMMAND cmd /c for /r %%i in (CMakeCache.*) do del "%%i" WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR})
        execute_process(COMMAND cmd /c for /d /r %%i in (*CMakeFiles*) do rd /s /q "%%i" WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR})
    else()
        execute_process(COMMAND find . -name "CMakeCache.*" -delete WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR})
        execute_process(COMMAND "rm -rf `find . -type d -name CMakeFiles`" WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR})
    endif()
endfunction()

CMake 3。X

CMake 3.0及以上版本提供了一个“干净”的目标。这将删除任何工件,如目标文件、库文件、可执行文件、生成文件等。

cmake --build C:/foo/build/ --target clean

您还可以清理构建,然后运行构建。在1命令。

cmake --build C:/foo/build --clean-first

但是,这不会清理CMakeCache.txt或相关的CMakeFiles/目录。你可能想这么做。你只需要删除构建文件夹。

# Just delete the build folder
rm C:/foo/build -rf

# You can also just let git delete the build folder as well
git clean -d -f -x

CMake 3.24

现在在CMake 3.24中,你可以执行一个新的构建树配置。这将删除任何现有的CMakeCache.txt文件和相关的CMakeFiles/目录,并从头开始重新创建它们。

一般情况下,你需要这样做:

你想清除CMakeCache.txt中的缓存变量 您希望更改编译器 任何与CMake缓存相关的其他操作

cmake -B C:/foo/build --fresh

简单地发布rm CMakeCache.txt也适用于我。