【问题标题】:Linking 2 static libraries with target_link_libraries用 target_link_libraries 链接 2 个静态库
【发布时间】:2019-03-09 11:53:26
【问题描述】:

我正在尝试使用 cmake 链接两个静态库,但是当我使用 ar -t 查看库时没有得到预期的结果。

库 A 链接到 B 的小例子:

文件a.c

void a(){}

文件b.c

void b(){}

文件CMakeLists.txt

project(test C)

add_library(a STATIC "a.c")
add_library(b STATIC "b.c")
target_link_libraries(a b)

我希望在输出 ar -t liba.a 中看到两个目标文件,但我只在输出中看到 a.c.o

【问题讨论】:

  • 您之前检查过 CMake 文档以验证您的期望吗?
  • 创建 static 库时,实际上并没有执行链接阶段。这不是 CMake 的特定内容,这只是静态库的起源。在您的情况下,对target_link_libraries(a b) 的调用仅影响项目后期对a 库的使用。例如。如果可执行文件将链接到a 库,它将自动链接到b 库。但同样,对应于a library 的文件不包含有关b library 的信息。
  • @Tsyvarev 我现在可以看到我的问题不是新问题,您是对的,但是您有指向有关您的断言的文档的链接吗?
  • 不,我没有文档链接。但是在 Stack Overflow 上有很多关于这个的问题。例如:stackoverflow.com/questions/2157629/…stackoverflow.com/questions/9334257/…

标签: cmake static-libraries static-linking


【解决方案1】:

您始终可以使用 VERBOSE=ON 参数来调试您的 CMakeLists.txt(在 Linux 上),这样您就可以验证命令是否是您所期望的。

$> make VERBOSE=ON

在您的情况下,CMake 会扫描 ac 的依赖项并将 bc 作为 ac 的真正依赖项丢弃,这就是它没有链接的原因。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-06-13
    • 1970-01-01
    • 2012-07-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多