2013-03-22 5 views
5

तो मैं फ़ाइलें (या मान) की सूची है मैं केवल Dira में फ़ाइलों के उप सूची कैसे मिलता है? मैं CMake 2.8.x और मैं थक गया regex मैच उपयोग कर रहा हूँ: "Dira/header1.h Dira/header2.hpp DirB/header3.h DirB /:CMake regex मैच निर्देशिका

string(REGEX MATCHALL "DirA/(.+)" DirA_FILES ${HEADER_FILES}) 

लेकिन परिणाम की तरह मूल स्ट्रिंग की सिर्फ नकल कर रहा है stuff.hpp "या कुछ भी नहीं।

खैर फिर हमेशा की तरह, जबकि इस प्रश्न लिखने मैं इसे हल:

set(SubListMatch) 
foreach(ITR ${HEADER_FILES}) 
    if(ITR MATCHES "(.*)DirA/(.*)") 
     list(APPEND SubListMatch ${ITR}) 
    endif() 
endforeach() 

लेकिन CMake तो कैसे मैं समारोह में है कि कोड को रैप करना मेरे लिए काफी नया बात है? मैंने अब तक किसी भी सीएमके समारोह को कभी नहीं लिखा है।

उत्तर

4

आप इस प्रकार का समारोह में बदल सकते हैं:

# Define function 
function(GetSubList resultVar) 
    set(result) 
    foreach(ITR ${ARGN}) # ARGN holds all arguments to function after last named one 
    if(ITR MATCHES "(.*)DirA/(.*)") 
     list(APPEND result ${ITR}) 
    endif() 
    endforeach() 
    set(${resultVar} ${result} PARENT_SCOPE) 
endfunction() 

# Call it 
GetSubList(SubListMatch ${HEADER_FILES}) 

जब इस कोड को चलाता है, SubListMatch मिलान किया तत्वों का आयोजन करेगा।

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

function(GetSubList resultVar dirName) 
    # as before, except the if() 
    if(ITR MATCHES "(.*)${dirName}/(.*)") 
    # same as before 
endfunction()