【发布时间】:2018-08-30 13:19:00
【问题描述】:
我的目标使用TARGET_LINK_LIBRARIES 和PUBLIC 关键字与几个库链接,INSTALL 命令看起来像INSTALL(TARGETS foo DESTINATION ${CMAKE_INSTALL_PREFIX}/bin)。我想以某种方式强制 cmake 包含我链接的所有(最好不包括系统库)库(仅限 SO),以包含在安装过程中。我试过 EXPORT 关键字,但看起来它只影响我在项目中构建的库,并用与 foo 库相同的 EXPORT 标记。
有可能吗?
EDIT001:可能影响答案的附加信息。
我正在使用vcpkg 来管理第三方。所以TARGET_LINK_LIBRARIES 看起来像
TARGET_LINK_LIBRARIES(foo PUBLIC
GTest::GTest
GTest::Main
${GOOGLE_MOCK}
event
${THRIFT_LIBRARIES}
${Boost_LIBRARIES}
lzo2
sqlite3
${ZeroMQ_LIBRARY}
gRPC::grpc
gRPC::grpc++
xml2
stdc++fs
bfd
-l:libisal.so.2
sgutils2
pthread
uuid
rt
)
所以,基本上我想要实现的是获取所有这些由vcpkg 宏化的库,例如${THRIFT_LIBRARIES}, ${Boost_LIBRARIES} and gRPC::grpc 等等
【问题讨论】:
-
您需要列出您需要单独安装的所有内容。 AFAIK,CMake 不会进行任何会自动安装所有依赖项的分析。此外,您只有一个目标:
foo和命令 install targets。当然,还有其他安装命令,但它们也不接近TARGET_LINK_LIBRARIES命令。 -
如果没有其他选项听起来足够好,另一个问题是,我可以访问通过
target_link_libraries添加的所有依赖项,因为它们生成到make文件中,因为它已经具有指向所以