首页 > 解决方案 > 如何强制 CMake 的 target_include_directories() 使用绝对路径

问题描述

如何强制 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值的当前设置。

我们需要它简单地推送环境变量,然后在开发过程中开发人员将FOOBAR_INCLUDE手动更改值,而不必每次都重新运行 CMake。

标签: cmake

解决方案


您可以通过生成器表达式欺骗 CMake 接受文字值

target_include_directories(foobar PRIVATE $<1:%FOOBAR_INCLUDE%>)

但是,这不起作用,因为 CMake 会生成有关路径不是绝对路径的错误。

幸运的是它是一个包含目录,因此您可以尝试手动添加包含标志:

target_compile_definitions(foobar PRIVATE -I%FOOBAR_INCLUDE%)

推荐阅读