此问题已在此处有答案:
install EXPORT problem for library with dependencies(2个答案)
15小时前关门了。
我正在尝试从CMake项目导出库。在内部,我将这个库分解为多个子目标。我现在想只导出完整的公共库,而不需要我的私有库二进制文件。以下内容不起作用。
cmake_minimum_required(VERSION 3.2)
project(export-mwe)
add_library(priv priv.cpp)
add_library(exp-lib exp-lib.cpp)
target_link_libraries(exp-lib PRIVATE priv)
install(TARGETS exp-lib EXPORT export-mwe DESTINATION lib)
install(EXPORT export-mwe DESTINATION .)
当我尝试生成这个项目时,我得到一个错误。
CMake Error: install(EXPORT "export-mwe" ...) includes target "exp-lib" which requires target "priv" that is not in the export set.
在这个例子中,我如何只导出exp-lib
,而不必导出priv
?
1条答案
按热度按时间eqzww0vc1#
库
exp-lib
是static(这是Linux上的默认设置),所以它没有与priv
“物理”链接:静态库的创建根本不调用链接器。当应用于静态库时,CMake以特定的方式解释
target_link_libraries
:与priv
库文件的实际链接被移动到与exp-lib
链接的every目标。也就是说,更进一步
将被转换到链接器的命令行
导出静态库时,CMake会暴露相同的行为:任何通过
target_link_libraries
链接到IMPORTED目标exp-lib
的目标都会自动链接到deps.a
。为了实现这样的行为,CMake需要知道deps.a
安装在哪里。虽然
deps.a
的安装位置可以从install(TARGETS deps)
命令中获得,但CMake仍然需要导出安装:install(TARGETS deps EXPORT export-mwe)
.