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

如何在CMake子目录中访问add_subdirectory引入的外部项目变量?

解决方法

要在Project B的Subdirectory_B目录下访问Project_A中定义的var_projectA变量,核心是让该变量突破原目录作用域,传递到上层及后续子目录中,有两种常用方案:

方案一:修改Project_A的CMakeLists,将变量传递到父作用域

直接在Project_A的CMakeLists_A.txt里修改set命令,添加PARENT_SCOPE参数,这样变量会被传递到调用add_subdirectory的父目录(也就是Project B的根目录),之后Project B的所有子目录(包括Subdirectory_B)就能直接访问这个变量:

# Project_A/CMakeLists_A.txt
set(var_projectA ${CMAKE_CURRENT_SOURCE_DIR}/foo.H PARENT_SCOPE)

之后在Subdirectory_B/CMakeLists_subB.txt里直接使用${var_projectA}即可,比如:

# Subdirectory_B/CMakeLists_subB.txt
message("Path to foo.H: ${var_projectA}")

方案二:将变量设为全局缓存变量

如果不想修改Project_A的配置,可以在Project B根目录的CMakeLists_B.txt里,把从Project_A获取的变量重新设置为全局缓存变量:

# Project_B/CMakeLists_B.txt
add_subdirectory(${CMAKE_SOURCE_DIR}/extern/Project_A)
# 将变量设为内部缓存变量,全局可见
set(var_projectA ${var_projectA} CACHE INTERNAL "Path to Project_A's foo.H")

之后同样可以在Subdirectory_B/CMakeLists_subB.txt里直接使用${var_projectA}。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 14:25:01