正如make clean删除makefile生成的所有文件一样,我想对CMake做同样的事情。我经常发现自己手动地在目录中删除像cmake_install这样的文件。cmake和CMakeCache.txt,以及CMakeFiles文件夹。
是否有像cmake clean这样的命令来自动删除所有这些文件?理想情况下,这应该遵循当前目录的CMakeLists.txt文件中定义的递归结构。
正如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
其他回答
如果你跑了
cmake .
它将重新生成CMake文件。如果您将一个新文件添加到由*选择的源文件夹中,这是必需的。比如Cc。
虽然这本身不是“清理”,但它通过重新生成缓存来“清理”CMake文件。
当然,外部构建是Unix makefile的首选方法,但如果您使用的是其他生成器,如Eclipse CDT,它更喜欢您构建内源。在这种情况下,您需要手动清除CMake文件。试试这个:
find . -name 'CMakeCache.txt' -o -name '*.cmake' -o -name 'Makefile' -o -name 'CMakeFiles' -exec rm -rf {} +
或者,如果你已经通过shop -s globstar启用了globstar,试试这个不那么恶心的方法:
rm -rf **/CMakeCache.txt **/*.cmake **/Makefile **/CMakeFiles
cmake主要生成一个Makefile文件,可以将rm添加到干净的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
当你在生成build文件时将-D参数传递给CMake,并且不想删除整个build/目录时:
简单地删除构建目录中的CMakeFiles/目录。
rm -rf CMakeFiles/
cmake --build .
这将导致CMake重新运行,并重新生成构建系统文件。您的构建也将从头开始。
创建一个临时构建目录,例如build_cmake。因此所有的构建文件都在这个文件夹中。
然后在主CMake文件中添加以下命令。
add_custom_target(clean-all
rm -rf *
)
因此,在编译时
cmake ..
和清洁做:
make clean-all