C ++构建过程 - 库依赖关系?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (1)
  • 关注 (0)
  • 查看 (71)

我有一个包含5个项目的Visual Studio解决方案

  • 主要:应用程序
  • A,B,C,D:静态库

主要取决于A,B。A取决于C,D。

我对构建过程有着脆弱的理解。

库存单独建设得很好,尤其是A; 我不觉得我把C和D连接到A上。

为了构建主应用程序,即使Main只直接依赖于A,B,我也必须将A,B,C和D作为输入库。

现在我正试图用CMake在Linux上构建他的整个事情,并且我发现自己再次暴露于这些链接。这一次我不想使用暴力,而更愿意理解这种联系的方式。

我应该将A,B,C和D构建为静态库并让Main包含它们全部?

A如何在没有C和D符号的情况下构建?

提问于
用户回答回答于

在构建可执行文件时,即使Main不直接引用来自C或的符号,也需要指定所有静态库D

现在,即使静态库不能隐式地依赖于其他库,CMake提供了一种在构建系统级别上表达这种依赖关系的方法。可以执行以下操作

add_library(C STATIC ${B_SOURCES})
add_library(D STATIC ${D_SOURCES})

add_library(A STATIC ${A_SOURCES})
target_link_libraries(A PUBLIC C D)

target_link_libraries上面的命令不会引起A与被链接CD-为我写的,是不是有静态库的工作。相反,它告诉CMake的与链接的可执行文件时A,它必须将其与链接CD太:

add_executable(Main ${MAIN_SOURCES})
target_link_libraries(Main PRIVATE A)

即使target_link_libraries只包含A,CMake生成的Makefile也会链接CD因为它们被指定为依赖关系A

扫码关注云+社区

领取腾讯云代金券