2012-07-02 16 views
8

बनाने मैं तीन फ़ाइलें:cmake एक साझा वस्तु

lib.c lib.h => वे एक .so फ़ाइल के रूप में बनाया जाना चाहिए
client.c => यह एक निष्पादन योग्य के रूप में बनाया जाना चाहिए।
client.c मैं lib.h फ़ाइल को शामिल इतनी के रूप में कार्य करता है lib.c के तहत परिभाषित की घोषणाओं पाने के लिए अंदर

किसी ने मुझे सही CMakeLists फ़ाइल है कि मैं तो स्रोत क्षेत्र है कि का उपयोग करना चाहिए बता सकते हैं अलग-अलग निर्माण और बाइनरी निर्देशिकाओं में उत्पन्न सीमेक की अस्थायी फ़ाइलों और बाइनरी और पुस्तकालयों (। विंडोज़ के विश्वास में डीडीएस) के साथ अनजान है?

उत्तर

4

CMake डिफ़ॉल्ट रूप से अलग निर्माण निर्देशिकाओं पर बनाता है (मैं इस उदाहरण का परीक्षण नहीं किया है):

PROJECT(myproject) 
CMAKE_MINIMUM_REQUIRED(VERSION 2.8) 

SET(mylibSRCS lib.c) 
SET(myprogSRCS client.c) 

ADD_LIBRARY(mylib ${mylibSRCS}) 
ADD_EXECUTABLE(myprog ${myprogSRCS}) 

TARGET_LINK_LIBRARIES(myprog mylib) 

आप कार्य करें:

mkdir build 
cd build 
cmake .. 
make 

सब कुछ निर्माण के तहत किया जाएगा।

+0

इन खोल आदेशों को क्रियान्वित करने के बिना एक नया निर्देशिका में हमेशा निर्माण करने के लिए एक रास्ता है:

समाधान तो जैसे "साझा" विकल्प याद आ रही है? मैं googled लेकिन कोई उपयोगी लिंक नहीं मिल सका। –

+0

http://stackoverflow.com/questions/11143062/getting-cmake-to-build-out-of-source-without-wrapping-scripts/11144109#11144109 – Fraser

+0

हां। आप 'mkdir build & cd build & cmake .. और बना सकते हैं। यदि आपको अपनी रिपॉजिटरी को सुपर-क्लीन करने की आवश्यकता है, तो बस बिल्ड निर्देशिका हटाएं। यह आपके मूल स्रोतों से जेनरेट की गई सामग्री को अलग करता है। – Stewart

11

यह समाधान .so फ़ाइल नहीं बनाएगा, लेकिन सेमेक के साथ आगे समावेशन के लिए एक सेमेक बराबर होगा।
मैं के साथ एक समाधान के लिए खोज कर रहा हूँ इस के बराबर प्रदान करेगा:

g++ -shared -Wl,-soname,plugin_lib.so.1 -o plugin_lib.so plugin_lib.o 

जो एक plugin_lib.so जो रनटाइम के दौरान dlopen के साथ गतिशील लोड किया जा सकता उत्पन्न होगा।

ADD_LIBRARY(mylib SHARED ${mylibSRCS}) 
+0

स्वीकृत उत्तर अपडेट किया जाना चाहिए –

संबंधित मुद्दे