我的CMakeLists具有以下结构:
...
add_subdirectory(staticLibrary1)
add_subdirectory(staticLibrary2)
add_subdirectory(staticLibrary3)
add_library(sharedLibrary ...)
target_link_libraries(sharedLibrary staticLibrary1 staticLibrary2 staticLibrary3)
...
问::如何正确安装 sharedLibrary ,以便可以在find_package()
上找到它并对其进行编译?
所需的结果是安装工作就像所有静态库代码都已复制到共享库一样。
我知道如何编写目标导出,创建config.cmake文件以及如何安装标头。问题与依赖项转换有关。
我可以想到2种不太好的方法。
1。(我现在的操作方式)
我安装了静态库的目标,然后在我的find_dependency()
文件中为每个目标添加了-config.cmake
。
它的一个缺点:静态库与 sharedLibrary 一起安装,我并不需要。如果我尝试跳过它们,它将开始抱怨缺少静态库。
(请注意,如果我将它们更改为共享库,则一切工作都将近乎完美。)
2。(我没有尝试过,但也应该可以使用)
使用生成器表达式,如下所示:
target_link_libraries(sharedLibrary $<BUILD_INTERFACE:staticLibrary1> $<BUILD_INTERFACE:staticLibrary2> $<BUILD_INTERFACE:staticLibrary3>)
但这有一个缺点:我无法在find_package()
调用期间自动收集其依赖项。
我可能第二次需要将所有依赖项写为$<INSTALL_INTERFACE>
。也许比第一种方法更不方便。