寻找一个“cmake clean”命令来清除CMake输出。

616

就像make clean会删除Makefile生成的所有文件一样,我希望在CMake中也能做到同样的事情。经常需要手动浏览目录并删除类似cmake_install.cmakeCMakeCache.txtCMakeFiles等文件。

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


5
针对 CMake 3.0 及更高版本的用户,您可以使用命令 cmake --build <build-dir> --target clean 来清除构建目录。 - Sean Francis N. Ballais
26个回答

-1

这个问题比较老了,但是如果你完全删除cmake-build-debug文件夹,在使用cmake编译时它应该会自动创建一个新的cmake-build-debug文件夹,并包含你需要的所有内容。在CLion中特别有效。


-2
如果您有自定义定义并希望在清理之前保存它们,请在构建目录中运行以下命令:
sed -ne '/variable specified on the command line/{n;s/.*/-D \0 \\/;p}' CMakeCache.txt

然后创建一个新的构建目录(或删除旧的构建目录并重新创建它),最后使用上面脚本中获取的参数运行cmake


-2

这是我使用的代码。它被封装在一个函数中,跨平台,并演示了如何查找匹配的文件名或文件夹名称,以防您想要进行任何简单的调整。每次构建我的脚本时,此函数都会运行,并且对我的需求完美地发挥作用。

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()

-2

cmake 主要是生成一个 Makefile,可以将 rm 添加到 clean PHONY 中。

例如:

[root@localhost hello]# ls
CMakeCache.txt  CMakeFiles  cmake_install.cmake  CMakeLists.txt  hello  Makefile  test
[root@localhost hello]# vi Makefile
clean:
        $(MAKE) -f CMakeFiles/Makefile2 clean
        rm   -rf   *.o   *~   .depend   .*.cmd   *.mod    *.ko   *.mod.c   .tmp_versions *.symvers *.d *.markers *.order   CMakeFiles  cmake_install.cmake  CMakeCache.txt  Makefile

-3

我成功地使用zsxwing的答案解决了以下问题:

我有源代码需要在多个主机上构建(例如树莓派Linux板、VMware Linux虚拟机等)

我有一个Bash脚本,根据机器的主机名创建临时目录,如下所示:

# Get hostname to use as part of directory names
HOST_NAME=`uname -n`

# Create a temporary directory for cmake files so they don't
# end up all mixed up with the source.

TMP_DIR="cmake.tmp.$HOSTNAME"

if [ ! -e $TMP_DIR ] ; then
  echo "Creating directory for cmake tmp files : $TMP_DIR"
  mkdir $TMP_DIR
else
  echo "Reusing cmake tmp dir : $TMP_DIR"
fi

# Create makefiles with CMake
#
# Note: switch to the temporary dir and build parent 
#       which is a way of making cmake tmp files stay
#       out of the way.
#
# Note 2: to clean up cmake files, it is OK to
#        "rm -rf" the temporary directories

echo
echo Creating Makefiles with cmake ...

cd $TMP_DIR

cmake ..

# Run makefile (in temporary directory)

echo
echo Starting build ...

make

-9

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

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

add_custom_target(clean-all
    rm -rf *
)

因此,在编译时执行。
cmake ..

清理操作如下:

make clean-all

12
如果有人意外地在源目录中构建项目而非在源之外构建,删除您的整个项目的好方法。 - user2288008
3
好的,这个方法只应该在"源外构建(out of source build)"的情况下使用。 - Natesh
7
糟糕的建议。不应该作为答案存在。 - Anne van Rossum
1
@AnnevanRossum 同意 - zevarito

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接