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

CMake多行生成器表达式如何正确使用?拆分写法导致头文件无法访问

CMake多行生成器表达式错误原因

你的改写版本存在两个核心错误:

  1. 生成器表达式配对错误:$<BUILD_INTERFACE: 与结尾 > 必须一一对应,你在第一个路径末尾额外加了 >,导致生成器表达式提前闭合,第二个路径被拼接了多余的 > 字符,形成了不存在的非法路径。
  2. 参数解析错误:最后单独的 > 会被CMake识别为无效的独立参数,进一步干扰编译配置的生成。
正确的多行生成器表达式写法

如果要将多个路径合并到同一个$<BUILD_INTERFACE>中,写法如下:

target_include_directories(application-smth
PRIVATE
    $<BUILD_INTERFACE:
        ${CMAKE_CURRENT_SOURCE_DIR}/data
        ${CMAKE_CURRENT_SOURCE_DIR}/include/application-smth
    >
PUBLIC
    $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include>
)

如果你想保留原有的两个独立$<BUILD_INTERFACE>结构,也可以单独换行,不会出现异常:

target_include_directories(application-smth
PRIVATE
    $<BUILD_INTERFACE:
        ${CMAKE_CURRENT_SOURCE_DIR}/data
    >
    $<BUILD_INTERFACE:
        ${CMAKE_CURRENT_SOURCE_DIR}/include/application-smth
    >
PUBLIC
    $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include>
)
使用注意事项
  • 生成器表达式的起始标记$<XXX:和结束标记>必须严格配对,中间参数部分不要额外添加>。
  • 同一个生成器表达式内的多个路径直接换行书写即可,CMake会自动将空白分隔的内容识别为独立的列表项。
  • 常规缩进字符不会影响路径解析,保持代码可读性即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.13 08:03:03