2012-09-07 14 views
5

मैं अपने सिस्टम और मेरे यूनिट परीक्षणों के निर्माण के लिए सीएमके का उपयोग कर रहा हूं।सीएमके यूनिट परीक्षणों के साथ परीक्षण फाइलों को कैसे स्थापित करें

मैं आउट-ऑफ-सोर्स बिल्ड भी कर रहा हूं।

मुझे ADD_TEST() कमांड के साथ मिला है, कि आपको परीक्षण निष्पादन योग्य स्थापित करने की आवश्यकता नहीं है (यह केवल तब चल जाएगा जब आप इंस्टॉल करते हैं, जो कि बढ़िया है)।

हालांकि, मेरे यूनिट परीक्षण कुछ इनपुट फ़ाइलों पर निर्भर करते हैं, जिन्हें निष्पादन योग्य बनाया गया है, जहां कॉपी करने की आवश्यकता है।

जहां तक ​​मुझे पता है, मैं फ़ाइलों को कॉपी करने के लिए इंस्टाल() का उपयोग नहीं कर सकता, क्योंकि मैंने निर्दिष्ट नहीं किया है कि है - यह इस बात पर निर्भर करता है कि बिल्ड कमांड कहां कहलाता है।

क्या कोई तरीका है कि मैं सीएमके को अपनी टेस्ट फाइलों को उसी स्थान पर कॉपी करने के लिए कह सकता हूं जो इसे निष्पादन योग्य बनाता है?

execute_process(COMMAND ${CMAKE_COMMAND} -E copy_if_different ${fileFrom} ${fileTo}) 

अपने इनपुट फ़ाइलों कुछ निर्माण द्वारा उत्पादित पर निर्भर करते हैं, तो आप इसके लिए एक लक्ष्य बना सकते हैं और all लक्ष्य में जोड़ सकते हैं:

उत्तर

1

यह सबसे अच्छा समाधान नहीं हो सकता है, लेकिन वर्तमान में मैं यह कर रहा हूं:

file(COPY my_directory DESTINATION ${CMAKE_CURRENT_BINARY_DIR}) 

कौन सा चाल कर जा रहा है।

+1

काम करता है, लेकिन कॉपी कॉन्फ़िगरेशन समय पर होती है। – fgiraldeau

3

ज़रूर, आप विन्यास कदम पर इस तरह से यह कर सकते हैं:

add_custom_target(copy_my_files ALL 
    COMMAND ${CMAKE_COMMAND} -E copy_if_different ${fileFrom} ${fileTo} 
    DEPENDS ${fileFrom} 
) 
+0

परिवर्तनीय 'CMAKE_PROGRAM'' CMAKE_COMMAND' होना चाहिए। – fgiraldeau

7

आप पैरामीटर COPYONLY साथ configure_file उपयोग कर सकते हैं। और अपने निर्माण dir को नकल करते हैं: $ {CMAKE_CURRENT_BINARY_DIR}

+0

एक उदाहरण: http://stackoverflow.com/a/1587317/1808261 – dtmland

0

प्रश्न काफी पुराना है, लेकिन मेरी राय में ${CMAKE_CURRENT_BINARY_DIR}) पर आवश्यक फ़ाइलों की प्रतिलिपि बनाने की तुलना में समस्या का बेहतर समाधान है। add_test कमांड में WORKING_DIRECTORY विकल्प है जो परीक्षण को चलाने के लिए निर्देशिका को चुनने की अनुमति देता है। तो मैं निम्नलिखित समाधान का सुझाव दूंगा:

add_executable(testA testA.cpp) 
add_test(NAME ThisIsTestA COMMAND testA WORKING_DIRECTORY ${DIRECTORY_WITH_TEST_DATA}) 

यह आपकी इनपुट फ़ाइलों की अनावश्यक प्रतिलिपि से बचाता है।