我有一个设置,其中收集了多个要设置为包含目录的包含目录,如以下模拟所示:
add_library(testlib SHARED "")
set_target_properties(testlib PROPERTIES LINKER_LANGUAGE CXX)
list(APPEND includePath "/some/dir" "/some/other/dir")
target_include_directories(testlib PUBLIC
$<BUILD_INTERFACE:${includePath}>
)
Run Code Online (Sandbox Code Playgroud)
现在的问题是以下
get_target_property(debug testlib INTERFACE_INCLUDE_DIRECTORIES)
message("${debug}")
Run Code Online (Sandbox Code Playgroud)
版画
/home/user/test-proj/$<BUILD_INTERFACE:/some/dir;/some/other/dir>
Run Code Online (Sandbox Code Playgroud)
出于某种原因,项目的绝对路径位于include目录之前。这导致了cmake的宣告:
CMake Error in src/hypro/CMakeLists.txt:
Target "testlib" INTERFACE_INCLUDE_DIRECTORIES property contains path:
"/home/user/test-proj/"
which is prefixed in the source directory.
Run Code Online (Sandbox Code Playgroud)
我可以以某种方式使用列表$<BUILD_INTERFACE>吗?
正如@Florian在评论中写道,确实$<BUILD_INTERFACE:>在引号中可以完成此工作:
target_include_directories(testlib PUBLIC
"$<BUILD_INTERFACE:${includePath}>"
)
Run Code Online (Sandbox Code Playgroud)
原因是includePath这里是一个列表,因此包含一个;,cmake不喜欢在字符串外部。
| 归档时间: |
|
| 查看次数: |
5591 次 |
| 最近记录: |