CMake中能否通过命名空间语法批量链接同一命名空间下的所有子目标?
CMake批量链接同一命名空间子目标的实现问题
CMake原生不支持foo::*这类通配符语法,来直接批量链接同一命名空间下的所有子目标,官方文档中也没有相关的语法定义。
如果想要实现类似批量链接的效果,常规方案有两种:
- 构建一个聚合用的INTERFACE目标,比如
add_library(foo::all INTERFACE),然后将所有foo::开头的子目标链接到这个聚合目标上,之后只需给你的目标链接foo::all即可 - 通过CMake脚本遍历当前已注册的所有目标,筛选出符合
foo::前缀的目标,再逐个调用target_link_libraries完成链接
但这两种方案都不符合你提出的“无需构建假目标或遍历已知目标列表”的要求。目前没有满足该条件的可行方法,你只能逐个明确指定需要链接的子目标,或者采用上述的替代方案。
内容的提问来源于stack exchange,提问作者StarShine
相关产品推荐
相关产品推荐

