我有一个非常简单的CMakeLists.txt
CMAKE_MINIMUM_REQUIRED(VERSION 2.8)
FIND_PACKAGE(VTK REQUIRED)
PROJECT(test CXX)
真的没有做任何事情。在/usr/lib/vtk-5.8/VTKConfig.cmake
下正确找到了VTK包。该文件包含许多类型
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作为示例。
答案 0 :(得分:24)
PROJECT设置了关于plarform的一些重要变量。
在将名称设置为PROJECT之前,请不要调用FIND_ *模块。
答案 1 :(得分:7)
当CMake全局属性 TARGET_SUPPORTS_SHARED_LIBS 设置为false并且您使用共享库时,会出现此错误消息。请参阅CMake源中的Source/cmAddLibraryCommand.cxx
第100行。
除非您正在为一个非常基本的系统(嵌入式操作系统)进行交叉编译,否则通常不会发生这种情况。
我怀疑这是最新版本的CMake中的错误,或者您没有正确配置CMake。