如何在Qt中递归添加源文件及指定子目录下的所有文件?
在Qt项目中递归添加源文件的方法
没问题,我来给你梳理几种实用的方法,帮你摆脱手动逐个写路径的麻烦!
方法一:用qmake递归通配符(最简单)
从Qt 5.11及以后的版本,qmake支持**作为递归通配符,能直接匹配指定目录下所有层级子目录里的目标文件。针对你的目录结构,只需要在.pro文件里写:
SOURCES += src/**/*.cpp
这样一行代码就能替代你之前写的所有路径,自动把src、src/app、src/app/foo、src/ui、src/common这些目录下的所有.cpp文件都添加到SOURCES里。
方法二:兼容旧版本Qt的自定义递归函数
如果你的Qt版本比较老(不支持**通配符),可以用qmake的内置函数实现递归遍历。在.pro文件里添加以下代码:
# 定义一个递归获取源文件的函数 defineReplace(recursiveGetSources) { # 第二个参数true表示递归遍历子目录 cppFiles = $$files($$1/*.cpp, true) return($$cppFiles) } # 调用函数,把src目录下所有递归找到的cpp文件加入SOURCES SOURCES += $$recursiveGetSources(src)
额外注意事项
- 排除不需要的文件/目录:如果有某些子目录或文件不想被包含,可以用
EXCLUDE_FILES来过滤,比如:EXCLUDE_FILES += src/test/*.cpp src/temp/**/*.cpp - 更新文件后要重新运行qmake:当你新增或删除源文件后,Qt Creator不会自动检测到变化,需要右键项目 → 选择「Run qmake」,再重新编译。
- 如果用CMake构建Qt项目:如果你的项目是用CMake而不是qmake,递归添加的写法是
file(GLOB_RECURSE SOURCES "src/**/*.cpp"),不过这种方式在CMake里有一些争议,更推荐用target_sources配合手动添加关键目录,但这是另一个话题啦。
内容的提问来源于stack exchange,提问作者maidamai
相关产品推荐
相关产品推荐

