2010-04-24 10 views
25

क्या जीएनयू का उपयोग करने का कोई तरीका अलग-अलग प्रोग्रामों में निर्देशिका में सभी सी फाइलों को संकलित करने का तरीका है, प्रत्येक प्रोग्राम को .c एक्सटेंशन के बिना स्रोत फ़ाइल के रूप में नामित किया गया है?निर्देशिकाओं में सभी सी फाइलों को अलग-अलग प्रोग्रामों में संकलित करें

उत्तर

41
SRCS = $(wildcard *.c) 

PROGS = $(patsubst %.c,%,$(SRCS)) 

all: $(PROGS) 

%: %.c 

     $(CC) $(CFLAGS) -o [email protected] $< 
+6

अनुस्मारक के साथ कि अंतिम अंतर वास्तव में एक टैब है। –

+0

@ मार्टिन शानदार! लेकिन मुझे समझ में नहीं आता कि आप मुख्य लाइन में प्रोग्स और एसआरसीएस क्यों नहीं कहते हैं। –

+0

@ user4050, क्षमा करें, मुझे आपका प्रश्न याद आया। डिफ़ॉल्ट 'सभी' लक्ष्य '$ (PROGS)' बनाता है, और मुख्य पंक्ति कहती है कि विस्तार के बिना फ़ाइलों को कैसे बनाया जाए, जो '% (PROGS) '' .c। फ़ाइलों से हैं, जो ' $ (एसआरसीएस) 'हैं। –

7

मुझे नहीं लगता कि आप भी एक makefile की जरूरत है - डिफ़ॉल्ट अंतर्निहित मेकअप नियम यह करना चाहिए:

$ ls 
src0.c src1.c src2.c src3.c 
$ make `basename -s .c *` 
cc  src0.c -o src0 
cc  src1.c -o src1 
cc  src2.c -o src2 
cc  src3.c -o src3 

संपादित कमांड लाइन एक छोटे से सरल बनाने के लिए।

4
SRCS = $(wildcard *.c) 

PROGS = $(patsubst %.c,%,$(SRCS)) 

all: $(PROGS) 

%: %.c 
     $(CC) $(CFLAGS) -o [email protected] $< 
clean: 
     rm -f $(PROGS) 

"साफ" लक्ष्य जोड़कर मार्टिन ब्रॉडहर्स्ट के जवाब में सुधार। "साफ करें" सभी निष्पादन योग्य साफ करेगा।

+0

आपको 'क्लीन' जैसे लक्ष्य के लिए '.PHONY' का उपयोग करना चाहिए। कारण के लिए http://stackoverflow.com/questions/2145590/what-is-the-purpose-of-phony-in-a-makefile देखें। –

+0

@ मार्टिन ब्रॉडहर्स्ट आपको लक्ष्य 'सभी' के लिए '.PHONY' का भी उपयोग करना चाहिए। – iBug

संबंधित मुद्दे

 संबंधित मुद्दे