2012-09-04 23 views
9

मैं बहुत ही सरल CMakeLists.txtCMake: "लक्ष्य मंच गतिशील जोड़ने का समर्थन नहीं करता"

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

कि वास्तव में कुछ नहीं करता है। पैकेज वीटीके सही ढंग से /usr/lib/vtk-5.8/VTKConfig.cmake के तहत पाया जाता है। इस फ़ाइल में संकेत मिलता है कि शेयर की गई लाइब्रेरी libfoobar.so निष्पादनयोग्य में जोड़ा जा करने की आवश्यकता होगी प्रकार

ADD_LIBRARY(foobar SHARED IMPORTED) 

के बयानों के एक नंबर शामिल हैं।

ऊपर स्क्रिप्ट का उपयोग कर 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 

इस चेतावनी का क्या मतलब है और यह कैसे के साथ पेश किया जाता है?

यह सीएमके 2.8.9 के साथ एक लिनक्स सिस्टम है। हालांकि यह त्रुटि संदेश उन सभी संकुलों के लिए प्रकट होता है जिनमें ADD_LIBRARY(foobar SHARED IMPORTED) है, VTK-5.8 का उपयोग यहां एक उदाहरण के रूप में किया जाता है।

उत्तर

7

यह त्रुटि संदेश तब होता है जब सीएमके वैश्विक संपत्ति TARGET_SUPPORTS_SHARED_LIBS गलत सेट है और आप साझा लाइब्रेरी का उपयोग करते हैं। सीएमके स्रोत में Source/cmAddLibraryCommand.cxx लाइन 100 देखें।

यह सामान्य रूप से तब तक नहीं होना चाहिए जब तक कि आप एक बहुत ही बुनियादी प्रणाली (एम्बेडेड ओएस) के लिए क्रॉस संकलन नहीं कर लेते।

मुझे संदेह है कि या तो यह सीएमके के नवीनतम संस्करण में एक बग है या आपने सीएमके को सही तरीके से कॉन्फ़िगर नहीं किया है।

+1

दरअसल। किसी कारण से, इस लिनक्स मशीन पर 'TARGET_SUPPORTS_SHARED_LIBS' सेट नहीं है। स्पष्ट रूप से 'SET_PROPERTY (वैश्विक संपत्ति TARGET_SUPPORTS_SHARED_LIBS TRUE) सेट करना 'चेतावनियों से दूर है। –

16

प्रोजेक्ट प्लारफॉर्म के बारे में कुछ महत्वपूर्ण चर सेट करता है।

प्रोजेक्ट में नाम सेट करने से पहले FIND_ * मॉड्यूल को कॉल न करें।

+0

ग्रेट उत्तर, हालांकि 'FIND_ * 'आदेश किसी टूलचैन फ़ाइल में लागू होने पर लागू नहीं होता है। Https://cmake.org/Bug/view.php?id=15999 देखें – Antonio