我有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 .有没有办法实现这个目标?
我没有找到上述问题的实际解决方案,但我发布了我自己的解决方法以供将来参考。
我意识到foo依赖关系是在导出中发出的;它只是没有路径。由于我仍然没有弄清楚如何让 cmake 导出路径,因此我将export命令恢复为上面问题中显示的命令(不带foo)。
然后我回到原来的foo导入位置并删除了add_library和set_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 链接。
| 归档时间: |
|
| 查看次数: |
2197 次 |
| 最近记录: |