无法使用 CMake 链接静态库

Posted

技术标签:

【中文标题】无法使用 CMake 链接静态库【英文标题】:Cannot link a static library using CMake 【发布时间】:2018-11-29 18:31:17 【问题描述】:

我有以下项目结构。

<root
  CMakeLists.txt
  <exec_folder
    CMakeLists.txt
    ...
  <lib_folder
    CMakeLists.txt
    ...

在 exec_folder 中我有一个 CLI 可执行文件,因此故意在附加目录中创建目标。

exec_folder CMakeLists.txt

...
add_executable (foo ...)
target_link_libraries(foo bar)

lib_folder CMakeLists.txt

...
add_library(bar ...)

现在我遇到了...cannot open file 'XXX.lib' 错误。 通常我在库目录嵌套到主目录时使用add_subdirectory,但现在它们处于同一级别。

【问题讨论】:

【参考方案1】:

我只是在这里猜测,因为您没有显示根 CMakeLists.txt 中包含的内容。但根据您没有使用 add_subdirectory() 的声明,您需要进行以下更改。

根 CMakeLists.txt 需要包含两者:

add_subdirectory(exec_folder)
add_subdirectory(lib_folder)

否则将不会构建栏,target_link_libraries(foo bar) 将只是搜索一些随机的bar.lib。如果错误实际上是XXX.lib,那你就有更大的问题了。

【讨论】:

以上是关于无法使用 CMake 链接静态库的主要内容,如果未能解决你的问题,请参考以下文章

为啥我无法链接到使用动态并行和可分离编译的 CUDA 静态库?

无法将 sndfile 库链接到 cmake 项目(MacOS)

如何使用cmake生成基于静态库的动态链接库

使用 cmake 如何静态链接一些库和动态链接其他库?

opencv静态链接库cmake链接顺序问题

使用 c++/cmake 链接静态库