2012-09-04 28 views
9

私は本当に何もしない、非常に単純なCMakeLists.txtCMakeの「ターゲット・プラットフォームが動的リンクをサポートしていません」

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

を持っています。パッケージVTKは正しく/usr/lib/vtk-5.8/VTKConfig.cmakeの下にあります。このファイルには、共有ライブラリlibfoobar.soは実行ファイルにリンクする必要があることを示すために、タイプ

ADD_LIBRARY(foobar SHARED IMPORTED) 

の文の数を含んでいます。

上記のスクリプトを使用してメイクファイルを作成すると、しかし、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を参照してください。

これは通常、非常に基本的なシステム(組み込みOS)のクロスコンパイルを行わない限り発生しません。

私はこれが最新バージョンの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

関連する問題