2013-08-25 9 views
10

में कस्टम बिल्ड चरण जोड़ें मैं सीएमके में एक कस्टम बिल्ड चरण जोड़ने की कोशिश कर रहा हूं जो कुछ फाइलें उत्पन्न करता है। मुझे कोई विवरण नहीं मिला है कि यह कैसे काम करता है।सीएमके

मेरे पास एक प्रोजेक्ट है जहां स्रोत, हेडर & कार्यान्वयन फ़ाइलों को ओडीबी द्वारा सी ++ के लिए उत्पन्न किया जाना है। ओडीबी क्लास हेडर को तर्क के रूप में लेता है और स्रोत प्रोजेक्ट जेनरेट करता है जिसे मैं अपने प्रोजेक्ट में उपयोग करना चाहता हूं।

add_custom_command(TARGET ${PROJECT_NAME} 
    PRE_BUILD 
    COMMAND odb -o /home/david/dev/ --std c++11 -I/home/david/dev/ -d sqlite --generate- query --generate-schema ${PROMOTER_LIB_PREFIX}/entities/person.hpp 
    DEPENDS ${PROJECT_NAME} 
    VERBATIM 
) 

एक फ़ाइल person.hpp ODB के लिए person-odb.hxx, person-odb.cxx, person-odb.ixx उत्पन्न करनी चाहिए लेकिन CMake आदेश I''ve इस्तेमाल किया है कुछ भी उत्पन्न नहीं करता है:

फ़िलहाल मेरी CMakeLists.txt का निम्न आदेश है । एक टर्मिनल में यह आदेश ठीक काम करता है।

मैं क्या गलत कर रहा हूं?

संपादित करें: समस्या निम्नलिखित लाइनों को जोड़कर हल किया जा सकता: कुछ इसी तरह के साथ,

set(FAKE_TARGET fakeTarget) 
add_custom_target(fakeTarget 
    odb -o /home/david/dev/ --std c++11 -I/home/david/dev/ -d sqlite --generate-query --generate-schema ${PROMOTER_LIB_PREFIX}/entities/person.hpp 
) 
add_dependencies(${PROJECT_NAME} ${FAKE_TARGET}) 

उत्तर

14

मेरे लिए, मैं सिर्फ का उपयोग करें:

add_custom_command(TARGET ${PROJECT_NAME} 
    PRE_BUILD 
    COMMAND odb -o /home/david/dev/ --std c++11 -I/home/david/dev/ -d sqlite --generate- query --generate-schema ${PROMOTER_LIB_PREFIX}/entities/person.hpp 
) 

हम DEPENDS का उपयोग नहीं करते या VERBATIM

DEPENDS विकल्प निर्दिष्ट करता है कि आदेश केवल तभी निष्पादित किया जाना चाहिए जब आपने इस विकल्प को दिया गया प्रोजेक्ट बनाया गया हो।

संपादित करें:

ध्यान दें कि PRE_BUILD विकल्प केवल 7 या उसके बाद दृश्य स्टूडियो पर समर्थित है। अन्य सभी जनरेटर के लिए PRE_BUILD को PRE_LINK के रूप में माना जाएगा।

शायद यही कारण है कि यह आपके लिए काम नहीं करता है।

के चारों ओर एक काम हो सकता है (एक सा बदसूरत):

  • एक नकली परियोजना
  • POST_BUILD के रूप में यह अपने कस्टम आदेश जोड़े बनाएं
  • आप वर्तमान परियोजना नकली एक
  • पर निर्भर बनाओ
+0

यह तब भी काम नहीं करता जब मैं 'DEPENDS' और' VERBATIM' हटा देता हूं। –

+0

@DavidBulczak मेरे संपादन को देखो। मैं काम पर वीएस का उपयोग करता हूं, यही कारण है कि यह मेरे लिए काम कर रहा है। –

+0

ठीक है। धन्यवाद। मैं जीसीसी/मेक और अन्य जीएनयू उपकरण का उपयोग करता हूं। क्या सीएमके में कस्टम प्री बिल्ड चरणों को जोड़ने के कोई अन्य तरीके हैं? –

1

रास्ता मैं इसे का उपयोग कर रहा है:

add_custom_command(
    OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/gen_icinstrtab.hpp 
    COMMAND xsltproc --output ${CMAKE_CURRENT_BINARY_DIR}/gen_icinstrtab.hpp ${CMAKE_SOURCE_DIR}/xml/genictabc.xslt ${CMAKE_SOURCE_DIR}/xml/icminstr.xml 
) 

add_executable(
    du4 

    ${CMAKE_CURRENT_BINARY_DIR}/gen_icinstrtab.hpp 
    . 
    . 
    . 
) 

कुंजी भी .hpp फ़ाइलों को add_executable ब्लॉक में जोड़ना था।