导出导入的库

Gil*_*ton 10 cmake

我有projectA,我正在导入一个库:

add_library(foo STATIC IMPORTED)
set_property(TARGET foo PROPERTY IMPORTED_LOCATION /path/to/foo.a)
Run Code Online (Sandbox Code Playgroud)

然后我foo在项目中的几个地方使用,一切正常.

我想要导出一个在这个项目中构建的库,以便在另一个具有完全断开连接的CMake配置的项目中使用.我有:

...
target_link_libraries(thislib foo)
export(TARGETS thislib FILE /path/to/thislib.cmake)
Run Code Online (Sandbox Code Playgroud)

导入projectB也需要foo(因为导入的库需要它),并抱怨它cannot find -lfoo.我尝试将它添加到export命令中,但后来我得到:

CMake Error at thislib/CMakeLists.txt:37 (export):
  export given target "foo" which is not built by this project.
Run Code Online (Sandbox Code Playgroud)

我只想将我在本地使用的相同配置导出到另一个(导入)项目.我不想foo明确地告诉projectB .有没有办法实现这个目标?

Gil*_*ton 2

我没有找到上述问题的实际解决方案,但我发布了我自己的解决方法以供将来参考。

我意识到foo依赖关系在导出中发出的;它只是没有路径。由于我仍然没有弄清楚如何让 cmake 导出路径,因此我将export命令恢复为上面问题中显示的命令(不带foo)。

然后我回到原来的foo导入位置并删除了add_libraryset_property,用以下内容替换它们:

set(foo /path/to/foo.a)
Run Code Online (Sandbox Code Playgroud)

然后将其更改target_link_libraries为:

target_link_libraries(thislib ${foo})
Run Code Online (Sandbox Code Playgroud)

换句话说,它只是一个原始库路径,而不是使其成为真正的“导入库”。这确实被正确写入导出文件并允许projectB 链接。

  • 这样做的一个问题是它不允许您设置目标属性,例如 INTERFACE_INCLUDE_DIRECTORIES (2认同)