如何获取CMake中mypkg包“命名空间”下的所有导入目标?
获取CMake中
mypkg::前缀的所有目标列表 要提取find_package(mypkg)导入的所有mypkg::前缀目标,可以通过以下步骤实现:
核心实现代码
# 获取项目中所有目标 get_cmake_property(all_targets BUILDSYSTEM_TARGETS) # 初始化存储目标列表的变量 set(mypkg_targets "") # 遍历筛选前缀匹配的目标 foreach(target ${all_targets}) if(target MATCHES "^mypkg::") list(APPEND mypkg_targets ${target}) endif() endforeach() # 可选:打印结果验证 message(STATUS "mypkg相关目标列表: ${mypkg_targets}")
版本兼容说明
- 上述代码中
BUILDSYSTEM_TARGETS属性要求CMake 3.15及以上版本,它能获取构建系统内的所有目标(包括导入目标) - 若使用CMake 3.14及更早版本,可替换为以下方式获取所有目标:
get_property(all_targets GLOBAL PROPERTY TARGETS)
注意事项
由于题目已明确项目中无其他mypkg::前缀的目标,因此无需额外过滤逻辑,直接匹配前缀即可完成筛选。
内容的提问来源于stack exchange,提问作者einpoklum
相关产品推荐
相关产品推荐

