2012-11-08 15 views
14

के साथ सीएमके का उपयोग करना एक प्रोजेक्ट के लिए मैं सी लाइब्रेरी बनाता हूं और सीएमके के साथ पायथन बाइंडिंग (गोब्जेक्ट इंट्रोस्पेक्शन के माध्यम से) को निहित करता हूं। मैं distutils का उपयोग कर कुछ पायथन सहायक मॉड्यूल भी वितरित करना चाहता हूँ। मैं इस CMakeLists.txtsetup.py

find_program(PYTHON "python") 

if (PYTHON) 
    set(SETUP_PY_IN "${CMAKE_CURRENT_SOURCE_DIR}/setup.py.in") 
    set(SETUP_PY "${CMAKE_CURRENT_BINARY_DIR}/setup.py") 
    set(DEPS  "${CMAKE_CURRENT_SOURCE_DIR}/module/__init__.py") 
    set(OUTPUT  "${CMAKE_CURRENT_BINARY_DIR}/build") 

    configure_file(${SETUP_PY_IN} ${SETUP_PY}) 

    add_custom_command(OUTPUT ${OUTPUT} 
         COMMAND ${PYTHON} 
         ARGS setup.py build 
         DEPENDS ${DEPS}) 

    add_custom_target(target ALL DEPENDS ${OUTPUT}) 

    install(CODE "execute_process(COMMAND ${PYTHON} ${SETUP_PY} install)") 
endif() 

और निम्नलिखित setup.py.in साथ मॉड्यूल का निर्माण और स्थापित करने में सक्षम हूँ:

from distutils.core import setup, Extension 

if __name__ == '__main__': 
    setup(name='foo', 
      version='${PACKAGE_VERSION}', 
      package_dir={ '': '${CMAKE_CURRENT_SOURCE_DIR}' }, 
      packages=['module']) 

दुर्भाग्य से, निर्माण कदम हर बार मैं make चलाने निष्पादित किया जाता है। मुझे लगता है, समस्या कस्टम कमांड के आउटपुट से संबंधित है जो फ़ाइल की बजाय निर्देशिका है। अब, क्या python setup.py build चलाने के लिए सीएमके को बताने का कोई तरीका है जब setup.py.in या स्रोतों में से एक बदल गया?

उत्तर

7

केवल फाइलें, निर्देशिका नहीं, विश्वसनीय रूप से आउटपुट और डिप्लेंडर के रूप में उपयोग की जा सकती हैं। आप टाइमस्टैम्प फ़ाइल का उत्पादन करने के लिए अपने कस्टम कमांड को संशोधित कर सकते हैं, इस तरह कुछ:

add_custom_command(
    OUTPUT ${OUTPUT}/timestamp 
    COMMAND ${PYTHON} setup.py build 
    COMMAND ${CMAKE_COMMAND} -E touch ${OUTPUT}/timestamp 
    DEPENDS ${DEPS} 
) 

add_custom_target(target ALL DEPENDS ${OUTPUT}/timestamp) 
+0

बिल्कुल वही जो मैं खोज रहा था। धन्यवाद। – matthias

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