cmake

2013-02-27 29 views
16

के साथ मेरी परियोजना के निर्माण के बाद ctest को कैसे चलाएं मैं चाहता हूं कि हर बार जब मेरी परियोजना सफलतापूर्वक बनाई गई हो तो मेरे परीक्षण लॉन्च किए जाएंगे। और अगर कुछ परीक्षण टूट जाते हैं तो मैं चाहता हूं कि मेरा निर्माण भी टूटा जाए। डिफ़ॉल्ट रूप से मुझे ctest कमांड चलाकर मैन्युअल रूप से परीक्षण चलाने की आवश्यकता है। सीटीएस्ट वास्तव में प्रोजेक्ट का निर्माण कर सकता है लेकिन मैं आईडीई का उपयोग करता हूं जो स्रोत बनाने के लिए make को आमंत्रित करता है। और make परीक्षण नहीं चलाता है।cmake

मैं यह आदेश मेरी रूट CMakeLists.txt फ़ाइल में जोड़ता हूं लेकिन यह काम नहीं करता है।

add_custom_command(OUTPUT tests.txt 
        POST_BUILD 
        COMMAND ctest --output-on-failure) 

सीएमके कोई भी त्रुटि नहीं लौटाता है और सब कुछ ठीक बनाता है लेकिन मेरा कस्टम कमांड नहीं चलता है। सीएमके में प्रत्येक सफल निर्माण के बाद मैं कुछ कैसे चला सकता हूं?

अद्यतन:

macro(add_unit_test target target_test) 
    set(UNIT_TEST_TARGETS ${UNIT_TEST_TARGETS} ${target_test} PARENT_SCOPE) 
    add_test(target ${CMAKE_CURRENT_BINARY_DIR}/target_test) 
endmacro(add_unit_test) 

यह add_test कॉल करता है और किसी सूची में परीक्षण लक्ष्य याद करते हैं:

मेरे अंतिम समाधान इस कार्य है। इस समारोह द्वारा जोड़े गए एक परियोजना में प्रत्येक परीक्षण।

add_custom_target(all_tests ALL 
        DEPENDS ${UNIT_TEST_TARGETS} 
) 
add_custom_command(TARGET all_tests 
        COMMENT "Run tests" 
        POST_BUILD COMMAND ctest ARGS --output-on-failure 
        WORKING_DIRECTORY ${CMAKE_BINARY_DIR} 
) 

ऐसा नहीं है कि एक परियोजना में सभी इकाई परीक्षण पर निर्भर करता है कस्टम लक्ष्य बनाता है: जड़ CMakeLists.txt में मैं इस कोड है। all_tests लक्ष्य के बाद कस्टम कमांड चलाया गया है।

+1

जवाब के लिए धन्यवाद - 'add_test' में अपने मैक्रो में,, मैं तुम्हें' $ {target_test} 'के बजाय' target_test' – experquisite

उत्तर

12

add_custom_command का यह फ़ॉर्म केवल तभी निष्पादित होगा जब किसी अन्य सीएमके लक्ष्य पर "test.txt" पर निर्भरता हो। मुझे लगता है कि कोई अन्य लक्ष्य "test.txt" इनपुट फ़ाइल के रूप में नहीं है, इसलिए कस्टम कमांड कभी नहीं चलता है।

मुझे लगता है कि आप अपने लक्ष्य को प्राप्त करने के लिए add_custom_command के दूसरे रूप का उपयोग कर सकते हैं; कुछ की तरह:

add_custom_command(TARGET MainTest 
        POST_BUILD 
        COMMAND ctest -C $<CONFIGURATION> --output-on-failure) 
+0

जवाब के लिए धन्यवाद की जरूरत है, इस की सराहना करते हैं लगता है! मुझे इसी तरह का समाधान मिला। मैं कस्टम लक्ष्य बनाता हूं जो प्रोजेक्ट में प्रत्येक इकाई परीक्षण पर निर्भर करता है और मैं अपने कस्टम लक्ष्य के साथ 'add_custom_command' का उपयोग TARGET पैरामीटर के रूप में करता हूं। यह जरूरी है क्योंकि मैं बालों के परीक्षण नहीं करना चाहता हूं। और मुझे यह भी पता चलता है कि 'सेमेक' परियोजना में सभी लक्ष्यों को गिनना असंभव है, इसलिए लक्ष्यों की सूची मैन्युअल रूप से बनाए रखने की आवश्यकता है। – Lazin