16

我有很简单的CMakeLists.txt

CMAKE_MINIMUM_REQUIRED(VERSION 2.8)
FIND_PACKAGE(VTK REQUIRED)
PROJECT(test CXX)

那真的什么都做不了。VTK 包正确地在/usr/lib/vtk-5.8/VTKConfig.cmake. 该文件包含许多类型的语句

ADD_LIBRARY(foobar SHARED IMPORTED)

表示共享库libfoobar.so需要在可执行文件中链接。

但是,在使用上述脚本创建 Makefile 时,CMake 会抱怨

CMake Warning (dev) at /usr/lib/vtk-5.8/VTKTargets.cmake:244 (ADD_LIBRARY):
  ADD_LIBRARY called with SHARED option but the target platform does not
  support dynamic linking.  Building a STATIC library instead.  This may lead
  to problems.
Call Stack (most recent call first):
  /usr/lib/vtk-5.8/VTKConfig.cmake:200 (INCLUDE)
  /usr/share/cmake-2.8/Modules/FindVTK.cmake:73 (FIND_PACKAGE)
  CMakeLists.txt:4 (FIND_PACKAGE)
This warning is for project developers.  Use -Wno-dev to suppress it

这个警告是什么意思,如何处理?

这是一个带有 CMake 2.8.9 的 Linux 系统。虽然对于包含 的所有软件包都会出现此错误消息,但ADD_LIBRARY(foobar SHARED IMPORTED)此处使用 VTK-5.8 作为示例。

4

2 回答 2

43

PROJECT 设置了有关平台的一些重要变量。

在将名称设置为 PROJECT 之前不要调用 FIND_* 模块。

于 2014-09-15T09:02:50.657 回答
10

当 CMake 全局属性TARGET_SUPPORTS_SHARED_LIBS设置为 false 并且您使用共享库时,会出现此错误消息。请参阅Source/cmAddLibraryCommand.cxxCMake 源代码中的第 100 行。

除非您为非常基本的系统(嵌入式操作系统)进行交叉编译,否则这通常不会发生。

我怀疑这是最新版本的 CMake 中的错误,或者您没有正确配置 CMake。

于 2012-09-04T14:56:00.867 回答