2012-04-23 15 views
42

का उपयोग करके संकलन में स्रोत फ़ाइल को बहिष्कृत करें क्या मेकफ़ाइल में वाइल्डकार्ड फ़ंक्शन का उपयोग करके संकलन प्रक्रिया में स्रोत फ़ाइल को बाहर करना संभव है?मेकफ़ाइल

की तरह कई स्रोत फ़ाइलें है,

src/foo.cpp 
src/bar.cpp 
src/... 

तब मेरे makefile में मेरे पास है,

SRC_FILES = $(wildcard src/*.cpp) 

लेकिन मैं bar.cpp बाहर करना चाहते हैं। क्या यह संभव है?

उत्तर

5

आप उपयोग कर सकते हैं Makefile subst समारोह:

EXCLUDE=$(subst src/bar.cpp,,${SRC_FILES}) 
9

उपयोग इसके लिए लगता है :)

SRC_FILES := $(shell find src/ ! -name "bar.cpp" -name "*.cpp") 
+0

क्या आपका मतलब $ (खोल ढूंढें src/...)? –

+0

हाँ, भूल गया :) – K1773R

69

आप उपयोग कर रहे हैं जीएनयू करें, आप उपयोग कर सकते filter-out:

SRC_FILES := $(wildcard src/*.cpp) 
SRC_FILES := $(filter-out src/bar.cpp, $(SRC_FILES)) 

या एक पंक्ति के रूप में:

SRC_FILES = $(filter-out src/bar.cpp, $(wildcard src/*.cpp)) 
+2

'मेकफ़ाइल' के लिए नया? तो इस उत्कृष्ट उत्तर को पढ़ने के बाद '=' और ': =' (ऊपर उपयोग किए गए दोनों) के बीच का अंतर देखें, और पता लगाएं कि आप आमतौर पर ': =' जब भी संभव हो, का उपयोग करना चाहते हैं! –

+1

'वैरिएबल की परिभाषा को अन्य चरों को हल करने की आवश्यकता होने पर': = 'का उपयोग करें: ["इन परिभाषाओं में वेरिएबल संदर्भ हो सकते हैं जिन्हें परिभाषा से पहले विस्तारित किया जाएगा"] (https://www.gnu.org/software/make/ मैनुअल/html_node/Setting.html # अनुक्रमणिका-_003a_003d-1) – mems

+0

@ टोमाज़ गैन्डर की टिप्पणी के लिए एक परिशिष्ट के रूप में: देखें [चर के दो स्वाद] [https://www.gnu.org/software/make/manual/ जीएनयू में html_node/Flavors.html # फ्लेवर्स) दस्तावेज़ बनाते हैं। – jhin

0

Unix glob पैटर्न src/[! B] *। Cpp बी से शुरू होने वाली सभी स्रोत फ़ाइलों को शामिल करता है।

यह केवल काम करेगा, हालांकि, अगर bar.cpp एकमात्र src फ़ाइल है जो बी से शुरू होती है या यदि आप इसे अद्वितीय चरित्र से शुरू करने के लिए नाम बदलने के इच्छुक हैं।