cmake - 如何强制 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 接受文字值
target_include_directories(foobar PRIVATE $<1:%FOOBAR_INCLUDE%>)
但是,这不起作用,因为 CMake 会生成有关路径不是绝对路径的错误。
幸运的是它是一个包含目录,因此您可以尝试手动添加包含标志:
target_compile_definitions(foobar PRIVATE -I%FOOBAR_INCLUDE%)
推荐阅读
- angular - Angular(Jasmine) 单元测试中的 beforeEach() 函数
- kubernetes - 如何监控持久卷的磁盘使用情况?
- php - 如何使用 bootstrap 和 Ajax 根据所选 ID 从 MySQL 数据库中获取数据?
- asp.net - 仅从“日期”类型列中获取日期
- swift - 如何从 Swift 5 上的 firebase 实时数据库中检索子数据
- android - SecurityException:不支持的路径 /storage/emulated/999/Download/somefile.pdf
- c# - MVC HttpPostedFilebase 总是返回 null
- mysql - 为什么 SQL 内连接在 laravel 中返回空结果?
- sql-server - 如何在多个表上创建视图,我想通过触发器插入数据
- python - 如何在使用python pandas连接一组csv文件时删除重复的标题(多行)