You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在CMakeLists.txt外获取CMake配置文件导出的目标列表?

获取CMake包导出目标的命令行方法

当然可以不用编写完整的CMakeLists.txt,直接通过CMake命令行执行临时脚本就能获取包导出的目标列表,以下是两种可行方案:

方案一:用CMake临时脚本(通用可靠)

直接在命令行中生成并执行一段CMake脚本,无需创建单独文件:

cmake -P <(echo "
# 设置包配置文件所在的前缀路径
set(CMAKE_PREFIX_PATH /opt/foo/lib64/cmake)
# 查找目标包,可按需添加版本要求,比如 Foo 1.0 REQUIRED
find_package(Foo REQUIRED)
# 获取当前构建系统中的所有目标
get_cmake_property(all_targets BUILDSYSTEM_TARGETS)
# 遍历并输出导入的目标(即包导出的目标)
foreach(target IN LISTS all_targets)
  if(TARGET \${target} AND TARGET_IS_IMPORTED(\${target}))
    message(STATUS \"导出目标: \${target}\")
  endif()
endforeach()
")

这段脚本的核心逻辑:

  • 通过CMAKE_PREFIX_PATH指定包配置文件所在的父目录,确保find_package能找到FooConfig.cmake
  • 用find_package加载包的配置,导入所有导出目标
  • 过滤出带有IMPORTED属性的目标,这些就是包导出的预构建目标

方案二:直接解析导出目标文件(快速但依赖格式)

如果包使用EXPORT命令生成了类似FooTargets.cmake的导出文件,可直接通过文本工具解析:

# 替换为实际的Targets文件路径
grep -E "^add_library|^add_executable" /opt/foo/lib64/cmake/foo/FooTargets.cmake | awk '{print $2}'

注意:这种方法依赖CMake导出文件的格式,若包的配置有特殊写法(比如用复杂的宏定义目标),结果可能不准确,仅适合快速验证。


内容的提问来源于stack exchange,提问作者einpoklum

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.11 16:03:14