2013-02-09 29 views
8

के साथ 'इंस्टॉल करें' मैं एक सी ++ लाइब्रेरी लिख रहा हूं जिसका उपयोग मैक और लिनक्स पर सी ++ और पायथन दोनों से किया जा सकता है। तो मैंने अपनी परियोजना के लिए सीएमके और एसडब्ल्यूआईजी का उपयोग करने का फैसला किया है।सीएमके + एसडब्ल्यूआईजी + पायथन

एसडब्ल्यूआईजी 2.0 दस्तावेज में वर्णित है, एसडब्ल्यूआईजी और सीएमके का संयोजन भी मेरे मैक पर ठीक काम करता है। http://www.swig.org/Doc2.0/SWIGDocumentation.html#Introduction_build_system

लेकिन मेरे पास make install के बारे में कोई प्रश्न है।

cmake . और make टाइप करने के बाद, _example.so सफलतापूर्वक जेनरेट किया गया था। लेकिन make install काम नहीं करता है, क्योंकि स्वत: जेनरेट किए गए मेकफ़ाइल में install लक्ष्य नहीं है। मैं जानना चाहता हूं कि मेकफ़ाइल में install लक्ष्य कैसे जोड़ सकता हूं। मैं _example.so को प्रत्येक सिस्टम पर site-packages निर्देशिका के तहत स्थापित करना चाहता हूं।

अगर कोई मुझे बता सकता है कि उपरोक्त लिंक में लिखे गए सीएमके उदाहरण को कैसे संशोधित किया जाए तो मैं इसकी बहुत सराहना करता हूं।

उत्तर

7

make install पर सीएमके इंटरफेस सीएमके कमांड install() है। अपने उदाहरण में, आप इस तरह एक अधिष्ठापन नियम जोड़ सकते हैं:

install(
    TARGETS ${SWIG_MODULE_example_REAL_NAME} 
    # ... add other arguments to install() as necessary 
) 

एक बार वहाँ एक CMakeList में किसी भी install() आदेशों हैं, CMake एक install लक्ष्य make install के रूप में प्रतिदेय उत्पन्न होगा।

+0

बहुत बहुत धन्यवाद। मैं पूरे आदेश दिखाने के लिए एक जवाब जोड़ दूंगा। –

+0

आश्चर्यचकित है कि उस परिवर्तनीय नाम को गतिशील रूप से कैसे उत्पन्न करें ... मेरी अपेक्षा के बावजूद, '$ {SWIG_MODULE _ $ {PROJECT_NAME} _REAL_NAME} 'काम करने लगता है! – Melebius

8
find_package(SWIG REQUIRED) 
find_package(PythonLibs REQUIRED) 

include(${SWIG_USE_FILE}) 
set(CMAKE_SWIG_FLAGS "") 
include_directories(${PYTHON_INCLUDE_DIRS}) 

set_source_files_properties(target.i PROPERTIES CPLUSPLUS ON) 
set_source_files_properties(target.i PROPERTIES SWIG_FLAGS "-includeall") 
swig_add_module(target python target.i ${SOURCES}) 
swig_link_libraries(target ${PYTHON_LIBRARIES}) 

execute_process(COMMAND python -c "from distutils.sysconfig import get_python_lib; print get_python_lib()" OUTPUT_VARIABLE PYTHON_SITE_PACKAGES OUTPUT_STRIP_TRAILING_WHITESPACE) 
install(TARGETS _target DESTINATION ${PYTHON_SITE_PACKAGES}) 
install(FILES ${CMAKE_BINARY_DIR}/src/target.py DESTINATION ${PYTHON_SITE_PACKAGES}) 
+0

यह कैसे काम करता है यदि CMAKE_INSTALL_PREFIX को स्थानीय निर्देशिका में सेट किया गया है? PYTHON_SITE_PACKAGES एक सिस्टम फ़ोल्डर को इंगित करेगा और उपसर्ग का उपयोग नहीं करेगा ... –

+0

मुझे libftdi python CMakeLists.txt फ़ाइल में उत्तर मिला। मुझे अभी तक किसी भी अपडेट के जवाब देने के लिए पर्याप्त समझ में नहीं आता है, लेकिन किसी के भी रुचि रखने के लिए http://developer.intra2net.com/git/?p=libftdi;a=blob;f=python/CMakeLists.txt; एच = 93410544fac2a45eec51cb8dd344708b3bbdfe67; एचबी = HEAD –

+0

यह व्यवहार पाइथन दुनिया में अपेक्षित है। लाइब्रेरी पर्यावरण में स्थापित हो जाती है कि पाइथन के लिए एक बेवकूफ कॉल का उपयोग किया जाएगा। यह आपको वर्तमान में सक्रिय वर्चुअलनव में स्थापित करने देता है या आप क्या हैं। –