【问题标题】:CMake imported library behaviourCMake 导入的库行为
【发布时间】:2013-02-13 09:55:21
【问题描述】:

我对 CMake 有一个奇怪的问题。

我正在将 Curl 导入到我的项目中,因此我为您编写了我的 CMakeLists.txt 文件的简化摘要。

ADD_LIBRARY(libcurl 共享导入)

SET_PROPERTY(TARGET libcurl PROPERTY IMPORTED_LOCATION ../lib/libcurl.lib)

当我运行 CMake 时,它​​会为 MS VC++(也适用于 Linux)生成项目文件。然后进入项目文件我发现curl库的引用错误(libcurl-NOTFOUND)!

如果我将代码更改为静态导入:

ADD_LIBRARY(libcurl 静态导入)

SET_PROPERTY(TARGET libcurl PROPERTY IMPORTED_LOCATION ../lib/libcurl.lib)

我找到了对 ../lib/libcurl.lib 的正确引用。

你知道为什么会这样吗?

非常感谢!

【问题讨论】:

  • 您好,请告诉我问题是如何解决的。我遵循了以下评论,但它导致了更多错误。

标签: c++ c cmake


【解决方案1】:

对于共享库,IMPORTED_LOCATION 必须指向 DLL,而不是导入库。请参阅documentation。您可能还想设置IMPORTED_IMPLIB 属性。

顺便说一句,CMake 也有一个用于 Curl 的 find package;也许你可以使用它?

【讨论】:

  • 我已将 DLL 添加到 IMPORTED_LOCATION。还添加了带有 IMPORTED_IMPLIB 的 LIB 但这并不能解决共享库链接的错误。
  • cmake 还需要查看 IMPORTED_IMPLIB 如果您声称您的库在 add_library 中是“共享的”。 Find*.cmake 模块中的常见做法似乎是将其声明为“未知”以避免该问题。
  • 另外,提供给IMPORTED_LOCATION路径必须是完整路径,而不是相对路径。
  • 需要注意的是,cmake 在add_library 上的文档对IMPORTED_IMPLIB 的引用为零。
猜你喜欢
  • 2018-08-15
  • 2013-03-26
  • 1970-01-01
  • 1970-01-01
  • 2016-06-01
  • 1970-01-01
  • 1970-01-01
  • 2017-05-06
  • 2022-11-10
相关资源
最近更新 更多