2012-09-04 79 views
9

我有一個非常簡單CMakeLists.txtCMake的Linux上:「目標平臺不支持動態鏈接」

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作爲示例。

回答

7

當CMake全局屬性TARGET_SUPPORTS_SHARED_LIBS設置爲false並且您使用共享庫時,會出現此錯誤消息。請參見CMake源代碼中的Source/cmAddLibraryCommand.cxx第100行。

除非您正在爲一個非常基本的系統(嵌入式操作系統)進行交叉編譯,否則通常不會出現這種情況。

我懷疑這是CMake最新版本中的錯誤,或者您沒有正確配置CMake。

+1

確實。出於某種原因,此處的Linux機器上未設置「TARGET_SUPPORTS_SHARED_LIBS」。顯式設置'SET_PROPERTY(GLOBAL PROPERTY TARGET_SUPPORTS_SHARED_LIBS TRUE)'會消除警告。 –

16

PROJECT設置了一些關於plarform的重要變量。

在將名稱設置爲PROJECT之前,不要調用FIND_ *模塊。

+0

很好的答案,但不適用於'FIND_ *'命令在工具鏈文件中的情況。請參閱https://cmake.org/Bug/view.php?id=15999 – Antonio