如何配置CMake以避免生成.ninja_log冗余文件?
CMake + Ninja 构建中
clean目标无法彻底清理.ninja_log文件 作为开发者,我希望减少本地机器上的文件冗余。暂时搁置软件项目时,我常会执行make clean来清理项目目录、释放磁盘空间。
但执行cmake --build . --target clean时,CMake会遗留大量冗余文件。我通过在ADDITIONAL_CLEAN_FILES目录属性中添加冗长的文件名列表,解决了大部分冗余问题:
set_property( DIRECTORY . APPEND PROPERTY ADDITIONAL_CLEAN_FILES "html;${EXECUTABLE_OUTPUT_PATH};debug;debug.log;Makefile;build.ninja;.ninja_deps;Testing;CTestTestfile.cmake;CMakeFiles;CMakeCache.txt;cmake_install.cmake;conanbuildinfo.cmake;conanbuildinfo.txt;conaninfo.txt;graph_info.json;conan.lock" )
不过在该列表中添加.ninja_log完全无效。CMake似乎会在每个任务(包括cmake --build . --target clean)执行后强制重新生成这个文件,导致所有CMake+Ninja项目都会遗留这个烦人的.ninja_log文件。
我还尝试声明自定义CMake清理目标来解决问题:
add_custom_target(clean-ninja-log COMMAND "${CMAKE_COMMAND}" -E rm -f .ninja_log)
但结果依旧,文件还是会被重新生成。
目前我可行的解决方案是用另一个构建系统包裹CMake,由外层构建系统通过C++标准库调用删除该文件。另一种类似方案是编写自定义的clean.ninja、clean.mk、clean.sh等脚本,但这类方案依赖rm或del命令,会限制可移植性,且需要维护多套脚本系统,十分繁琐。
我需要一个类似make clean的纯CMake解决方案,实现项目的完整清理。如果可能的话,比如有没有办法配置CMake停止在每个任务后执行ninja -t restat?
内容的提问来源于stack exchange,提问作者mcandre
相关产品推荐
相关产品推荐

