CMake в Linux: "целевая платформа не поддерживает динамическую компоновку"

у меня очень простой 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 необходимо будет связать в исполняемых файлах.

при создании Makefiles с использованием вышеуказанного скрипта, однако, 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

что означает это предупреждение и как он занимается с?

это система Linux с CMake 2.8.9. Хотя это сообщение об ошибке появляется для всех пакетов, содержащих ADD_LIBRARY(foobar SHARED IMPORTED), VTK-5.8 используется в качестве примера здесь.

2 ответов


это сообщение об ошибке возникает, когда глобальное свойство CMake TARGET_SUPPORTS_SHARED_LIBS имеет значение false, и вы используете общую библиотеку. См.Source/cmAddLibraryCommand.cxx строка 100 в источнике CMake.

обычно это не должно происходить, если вы не выполняете перекрестную компиляцию для очень простой системы (встроенной ОС).

Я подозреваю, что либо это ошибка в последней версии CMake, либо вы неправильно настроили CMake.


проект устанавливает некоторые важные переменные о plarform.

не вызывайте модули FIND_ * перед установкой имени в PROJECT.