Qt pri文件自定义函数配置SUBDIRS的.file属性失效问题
问题原因
你的.file属性配置不生效,核心是两个qmake语法和逻辑错误:
- 变量拼接语法错误:qmake中对带变量替换的复合变量赋值,必须使用
$${变量名}.属性的格式,你写的{$$library_name}.file会被qmake识别为名为{libA}的独立变量,和SUBDIRS列表中存储的libA子项完全无法匹配,属性自然不会生效。 - 变量导出缺失+冗余配置:你只导出了
SUBDIRS和QMAKE_EXTRA_TARGETS两个变量,每个子项目生成的.file、.path属性变量没有导出到父作用域,外层.pro文件拿不到这些配置;另外SUBDIRS是qmake内置的子项目管理变量,不需要额外加入QMAKE_EXTRA_TARGETS,多余的配置反而会干扰qmake的正常解析。
可直接使用的修正代码
把.pri文件里的函数替换为以下内容即可:
defineTest(addMyProject) { library_name = $$1 # 注册子项目 SUBDIRS += $$library_name # 绑定子项目实际pro文件路径 $${library_name}.file = $$library_name/source/$${library_name}.pro # 对应原有配置的path属性 $${library_name}.path = source/ # 导出所有相关配置到父作用域 export(SUBDIRS) export($${library_name}.file) export($${library_name}.path) }
替换后你预期的简洁调用方式可以正常工作,Qt Creator会仅加载你指定路径下的pro文件,不会展示库目录下其他无关子项目。
扩展支持depend配置
如果后续需要支持依赖配置,只需要给函数增加可选的依赖参数,扩展后代码如下:
defineTest(addMyProject) { library_name = $$1 depend_list = $$2 SUBDIRS += $$library_name $${library_name}.file = $$library_name/source/$${library_name}.pro $${library_name}.path = source/ # 传入依赖时配置depends属性,支持空格分隔多依赖 !isEmpty(depend_list) { $${library_name}.depends = $$depend_list export($${library_name}.depends) } export(SUBDIRS) export($${library_name}.file) export($${library_name}.path) }
调用示例:
template(subdirs) addMyProject(libA) addMyProject(libB, libA) # libB依赖libA addMyProject(libC, libA libB) # libC同时依赖libA和libB
效果和逐行手写SUBDIRS配置完全一致。
内容的提问来源于stack exchange,提问作者zerunio
相关产品推荐
相关产品推荐

