【问题标题】:CMake linking library doesn't show up in VisualStudio generated projectCMake 链接库未显示在 VisualStudio 生成的项目中
【发布时间】:2018-12-16 02:35:06
【问题描述】:

我正在使用 cmake 为 Windows 生成一个 VisualStudio 项目,并且提供的链接功能似乎不适用于生成的 VisualStudio 项目。

生成的项目是一个库,它依赖另一个库作为依赖项。

项目的生成工作正常,但无论我尝试什么,“附加依赖项”条目下都没有出现任何内容。

我尝试在声明“add_library(MyLib)”之前和之后同时使用“link_libraries”和“target_link_libraries” 例如,我试过这个:

project( MyLib )
...
add_library( MyLib ${source_list} )
...
target_link_libraries ( MyLib ${SOME_LIB_PATH} )
target_link_libraries ( MyLib "${SOME_LIB_PATH}" )
target_link_libraries ( MyLib W:/work/Project/MyLib/ )
target_link_libraries ( MyLib "W:/work/Project/MyLib/" )
target_link_libraries ( MyLib W:/work/Project/MyLib/MyLib.lib )
target_link_libraries ( MyLib "W:/work/Project/MyLib/MyLib.lib" )
target_link_libraries ( MyLib banane )
target_link_libraries ( MyLib whatever )
target_link_libraries ( MyLib "test" )
...
include_directories(
    "Include/"
    ${SOME_LIB_INCLUDE_PATH}
)

尽管包含目录正确显示在项目属性中。 那么这是一个错误还是我错过了什么:)?

【问题讨论】:

  • 实际上,您的代码看起来还不错。但是,请注意(静态)库没有相互链接。 (相反,可执行文件链接到这些库。)DLL 是。 MyLib是专门用来做静态库还是DLL? (CMake 中应该有另一个设置来确定这一点,但它没有公开,我不记得是否有默认值。)
  • 在文档中找到它:BUILD_SHARED_LIBS.
  • 这很有趣:我查看了我最近从头开始制作的一个 CMake 项目(而不是重新使用旧的/正在工作的)。我搜索了BUILD_SHARED_LIBS 的定义/分配,但找不到任何东西。哎呀。 (使用它的条件,但没有定义。)然后我查看了一个库的 VS 项目,实际上,它是作为静态库构建的。那不是故意的(尽管它并不麻烦-编写代码以在两种情况下都可以使用)。顺便提一句。我查看了依赖项(依赖于 Qt 的那个库),是的,我可以确认,没有额外的依赖项(因为它们不需要 - 正如我上面解释的那样)。
  • 我想这是我的一个很大的误解,看到我不知道库实际上并没有相互链接,当我看到构建成功时我很困惑,尽管 .lib没有链接...

标签: c++ cmake static-libraries


【解决方案1】:

Scheff 回忆起静态库实际上并没有与其他潜在的静态库链接,从而为我指明了正确的方向。

尽管 VisualStudio 允许在其 UI 中指定静态库依赖项,但它实际上并没有发生,CMake 通过实际上没有将其添加到生成的项目中来显示这一点;那是令人困惑的部分。

如果我没记错的话,只要最终的可执行文件与所述库及其库依赖项链接,即使它使用来自它的代码,静态库也可以在不显式链接到另一个静态库依赖项的情况下正常编译。

感谢@Scheff 的评论!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-01-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-07-24
    • 1970-01-01
    • 2023-03-15
    • 2020-07-28
    相关资源
    最近更新 更多