2012-09-04 17 views
9

Ich habe das sehr einfach CMakeLists.txtCMake auf Linux: „Zielplattform unterstützt keine dynamische Verknüpfung“

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

, die wirklich nichts tut. Das Paket VTK ist korrekt unter /usr/lib/vtk-5.8/VTKConfig.cmake zu finden. Diese Datei enthält eine Reihe von Aussagen des Typs

ADD_LIBRARY(foobar SHARED IMPORTED) 

um anzuzeigen, dass die gemeinsam genutzte Bibliothek libfoobar.so muß in ausführbaren Dateien verknüpft werden.

Nach Makefiles unter Verwendung des obigen Skript erstellen, beschweren CMake wird jedoch, dass

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 

Was diese Warnung bedeutet das und wie wird sie behandelt?

Dies ist ein Linux-System mit CMake 2.8.9. Während diese Fehlermeldung für alle Pakete angezeigt wird, die ADD_LIBRARY(foobar SHARED IMPORTED) enthalten, wird hier VTK-5.8 als Beispiel verwendet.

Antwort

7

Diese Fehlermeldung tritt auf, wenn die globale CMake-Eigenschaft TARGET_SUPPORTS_SHARED_LIBS auf false festgelegt ist und Sie eine gemeinsam genutzte Bibliothek verwenden. Siehe Source/cmAddLibraryCommand.cxx Zeile 100 in der CMake-Quelle.

Dies sollte normalerweise nicht auftreten, wenn Sie Cross-Compiling für ein sehr einfaches System (Embedded OS) durchführen.

Ich vermute, dass dies entweder ein Fehler in der neuesten Version von CMake ist oder Sie CMake nicht korrekt konfiguriert haben.

+1

In der Tat. Aus irgendeinem Grund ist 'TARGET_SUPPORTS_SHARED_LIBS' hier nicht auf diesem Linux-Rechner eingestellt. Explizites Setzen von 'SET_PROPERTY (GLOBAL PROPERTY TARGET_SUPPORTS_SHARED_LIBS TRUE)' beseitigt die Warnungen. –

16

PROJECT legt einige wichtige Variablen für die Plattform fest.

Rufen Sie die FIND_ * Module nicht auf, bevor Sie PROJECT einen Namen zuweisen.

+0

Große Antwort, jedoch nicht anwendbar, falls der Befehl 'FIND_ *' in einer Toolchain-Datei enthalten ist. Siehe https://cmake.org/Bug/view.php?id=15999 – Antonio