如何让CMake仅删除空目录?
仅删除空目录的CMake实现方案
如果不想用递归删除的高风险操作,CMake本身没有直接提供仅删除空目录的命令,但可以通过以下两种方式实现:
调用系统原生命令:直接借助shell的
rmdir命令,它只删除空目录,非空时会报错退出。在CMake脚本里可以这么写:execute_process(COMMAND rmdir mydir RESULT_VARIABLE rmdir_result ERROR_VARIABLE rmdir_error)这样如果目录非空,
rmdir不会执行删除,还能通过rmdir_result和rmdir_error获取执行状态和错误信息,避免误删。CMake脚本判断目录是否为空:先遍历目录内容,确认为空后再删除。示例代码:
file(GLOB_RECURSE dir_contents "${mydir}/*") if(NOT dir_contents) file(REMOVE_DIRECTORY "${mydir}") endif()这里用
file(GLOB_RECURSE)获取目录下所有内容,判断为空后再调用file(REMOVE_DIRECTORY)删除(如果只需检查一级目录是否为空,把GLOB_RECURSE换成GLOB即可)。
另外你提到的cmake -E rm的-r和-R确实是同义词,二者都会触发递归删除行为,没有功能差异。
内容的提问来源于stack exchange,提问作者pm100
相关产品推荐
相关产品推荐

