我正在使用CMake 3.5.2。
考虑以下情况。我有一个导入的库Foo::Foo
:
add_library(Foo::Foo UNKNOWN IMPORTED)
此导入的库已填充适当的属性:
set_target_properties(Foo::Foo PROPERTIES
INTERFACE_INCLUDE_DIRECTORIES "/path/to/include/blah" "/another/path/include/other"
IMPORTED_LINK_INTERFACE_LIBRARIES blah other
IMPORTED_LOCATION "/path/to/libfoo.a-or-so")
我有一个名为bar
的便利库。我需要它包含Foo::Foo
的include目录,但我不希望它链接到Foo::Foo
。
add_library(bar STATIC "${BAR_SOURCES}")
如何只添加Foo::Foo
中的include依赖项?以下是我尝试失败的内容:
# This did not include any includes from Foo::Foo
target_link_libraries(bar INTERFACE Foo::Foo)
# This included only the first include directory from Foo::Foo
target_include_directories(bar PUBLIC "$<TARGET_PROPERTY:Foo::Foo,INTERFACE_INCLUDE_DIRECTORIES>")
答案 0 :(得分:2)
我试过给你一个例子。您应该将示例中的代码更改为:
target_link_libraries(bar Foo::Foo)
set_target_properties(bar PROPERTIES INTERFACE_LINK_LIBRARIES "")
拨打set_target_properties()
只接受&#34;属性&#34; /&#34;价值&#34;对(以空格作为分隔符)。你的例子并没有抛出任何错误,因为你总能定义自己的属性(任何命名)。
请将您的包含目录列表转移到&#34; CMake列表&#34; (带分号分隔元素的字符串)。
<强>替代强>
如果你只想&#34;重置&#34;您可以使用例如:
来执行传递库{{1}}
当我在同一项目中构建共享库时,我使用了这种方法,因为我正在链接相同的项目(并且我不希望共享库的库依赖项也链接到目标使用共享库)。
<强>参考强>