CMake中file(GLOB)目录不存在无警告?如何设置提示或终止脚本?
解决CMake file(GLOB)文件夹不存在时静默失败的问题
CMake的file(GLOB)确实会在目标目录不存在时静默返回空列表,这很容易埋下隐蔽bug。要实现目录不存在时的警告或终止,只需在执行GLOB前手动添加目录存在性检查即可:
方法1:检查目录并发出警告
如果希望仅提示问题但继续构建,可以用message(WARNING):
set(TARGET_DIR "blablablabla") # 验证目标目录是否存在 if(NOT EXISTS "${TARGET_DIR}") message(WARNING "指定的目录 ${TARGET_DIR} 不存在,file(GLOB) 将返回空列表") endif() # 执行文件收集 file(GLOB mylist "${TARGET_DIR}/*")
方法2:检查目录并终止构建
如果要强制终止脚本以避免后续错误,改用message(FATAL_ERROR):
set(TARGET_DIR "blablablabla") if(NOT EXISTS "${TARGET_DIR}") message(FATAL_ERROR "指定的目录 ${TARGET_DIR} 不存在,构建终止") endif() file(GLOB mylist "${TARGET_DIR}/*")
额外提示
CMake官方其实不推荐使用file(GLOB),因为当新增文件时,CMake不会自动重新扫描目录,需要手动触发重新配置。如果项目允许,建议直接显式列出所有需要的文件,从根源减少这类路径相关的隐蔽问题。
内容的提问来源于stack exchange,提问作者Nullarity
相关产品推荐
相关产品推荐

