2010-02-02 13 views
14

में वाइल्डकार्ड से मेल खाने वाली फ़ाइलों पर लूपिंग मैं कुछ परीक्षण चलाने के लिए सीएमके का उपयोग करना चाहता हूं। परीक्षण में से एक को "फिक्स्चर/*। Ext" से मेल खाने वाली सभी फ़ाइलों पर एक वैधकर्ता स्क्रिप्ट को कॉल करना चाहिए। असली सीमेक में निम्नलिखित छद्म-सीएमके को कैसे बदल सकता है?सीएमके

i=0 
for file in fixtures/*.ext; do 
    ADD_TEST(validate_${i}, "validator", $file) 
    let "i=i+1" 
done 

उत्तर

24
इस तरह

:

file(GLOB files "fixtures/*.ext") 
foreach(file ${files}) 
    ... calculate ${i} to get the test name 
    add_test(validate_${i}, "validator", ${file}) 
endforeach() 

लेकिन यह आप के लिए i गणना नहीं करता है। क्या यह महत्वपूर्ण है कि आपके पास परीक्षण के लिए एक पूर्णांक प्रत्यय है? अन्यथा आप उपयोग करने के लिए फ़ाइल नाम (एक्सटेंशन के बिना) निकालने के लिए file(...) का उपयोग कर सकते हैं।

5

आपको सीएमके की परीक्षण मशीनरी को सक्रिय करने के लिए enable_testing की आवश्यकता है। add_test फ़ंक्शन को परीक्षण के नाम और चलाने के लिए कमांड की आवश्यकता है और वाक्यविन्यास नीचे जैसा है।

काउंटर जोड़ने के लिए, आप math() फ़ंक्शन का उपयोग कर सकते हैं। निम्नलिखित आपको इनपुट के पूर्ण पथ को निर्दिष्ट करके स्रोत निर्माण से बाहर निकलने देगा।

cmake_minimum_required(VERSION 2.6) 
enable_testing() 

file(GLOB files "${CMAKE_CURRENT_SOURCE_DIR}/fixtures/*.ext") 
set(validator ${CMAKE_CURRENT_SOURCE_DIR}/validator) 
set(i 0) 
foreach(filename ${files}) 
    add_test(NAME "validate_${i}" 
     COMMAND "${validator}" ${filename}) 
    math(EXPR i "${i} + 1") 
endforeach()