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

CMake技术疑问:为何无法从INTERFACE目标读取INCLUDE_DIRECTORIES?

问题原因与解决方法

为什么属性读取失败?

1. INTERFACE库不具备INCLUDE_DIRECTORIES属性

你创建的version是INTERFACE类型库,这类库仅用于传递编译接口(比如头文件路径、编译选项等),本身没有可编译的代码,也不存在自身的包含目录。INCLUDE_DIRECTORIES属性是为有实体的库(STATIC/SHARED/OBJECT)设计的,用来指定库自身编译时的头文件路径,所以对INTERFACE库读取这个属性必然返回NOTFOUND。

2. get_cmake_property不能用于读取目标属性

get_cmake_property的作用是读取CMake全局属性(比如CMAKE_MODULE_PATH这类),而非目标的属性。要读取目标的属性,必须使用get_target_property——这就是你前三个读取操作失败的核心原因。只有最后一个用get_target_property读取INTERFACE_INCLUDE_DIRECTORIES的操作是正确的,所以能拿到正确路径。

用生成器表达式读取目录的正确方式

如果要通过生成器表达式获取该目录,直接使用目标属性的生成器表达式语法即可,无需提前用get_target_property获取:

# 示例:在其他目标中使用生成器表达式引用该目录
add_executable(my_app main.cpp)
target_include_directories(my_app PRIVATE
    $<TARGET_PROPERTY:version,INTERFACE_INCLUDE_DIRECTORIES>
)

或者更简洁的方式:直接通过target_link_libraries让目标继承INTERFACE库的接口属性,无需手动引用路径:

add_executable(my_app main.cpp)
target_link_libraries(my_app PRIVATE version)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.16 02:12:44