gpt4 book ai didi

cmake - 如何强制 CMake 的 target_include_directories() 使用绝对路径

转载 作者:行者123 更新时间:2023-12-04 09:31:02 27 4
gpt4 key购买 nike

如何强制 CMake 的功能 target_include_directories()将值视为绝对路径?
例如,我想要这行代码:

target_include_directories(foobar  PRIVATE   "%FOOBAR_INCLUDE%")
只需添加 %FOOBAR_INCLUDE%到包含目录的列表。
然而,我们实际得到的是 c:\path\to\foobar\%FOOBAR_INCLUDE% .
知道 我能做到的
target_include_directories(foobar  PRIVATE   "$ENV{FOOBAR_INCLUDE}")
但这不是我想要的。这将扩展环境变量的值并插入 FOOBAR_INCLUDE 的当前设置。值(value)。
我们需要它简单地推送环境变量,然后在开发过程中开发人员将更改 FOOBAR_INCLUDE 的值。无需每次都重新运行 CMake。

最佳答案

不可能以这种方式向包含目录添加看起来像相对目录(即 "%FOOBAR_INCLUDE%" )的内容。 CMake 将始终尝试将这些操作为绝对路径。这或多或少在 include_directories 中有说明。文档:

Relative paths are interpreted as relative to the current source directory.


但适用于 target_include_directories()命令也是如此。
即使你试图规避这一点,并设置 INCLUDE_DIRECTORIES手动目标的属性:
set_target_properties(foobar PROPERTIES
INCLUDE_DIRECTORIES "%FOOBAR_INCLUDE%"
)
CMake 在生成阶段会抛出错误:
CMake Error in CMakeLists.txt:
Found relative path while evaluating include directories of "foobar":

"%FOOBAR_INCLUDE%"
你可以妥协,提供一个 路径,但允许 %FOOBAR_INCLUDE%变量停留:
target_include_directories(foobar PRIVATE "C:/%FOOBAR_INCLUDE%")
但这会将您和您的开发伙伴与 C: 驱动器联系起来。

我建议遵循您建议的方法,使用环境变量:
target_include_directories(foobar  PRIVATE   "$ENV{FOOBAR_INCLUDE}")
或创建 FOOBAR_INCLUDE CMake 缓存 每个开发人员在重新运行 CMake 之前可以填充的变量。如果每个开发人员的环境不同,则应重新配置 CMake 以匹配该环境。

关于cmake - 如何强制 CMake 的 target_include_directories() 使用绝对路径,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62842568/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com