CMake包含导入库的依赖关系而不进行链接

时间:2016-07-22 19:44:59

标签: cmake

我正在使用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>")

1 个答案:

答案 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}}

当我在同一项目中构建共享库时,我使用了这种方法,因为我正在链接相同的项目(并且我不希望共享库的库依赖项也链接到目标使用共享库)。

<强>参考