दिलचस्प है, मैं स्रोत फ़ाइलों के बारे में सी संकलक दी नियमों का उपयोग करने के लिए डिफ़ॉल्ट होता नहीं पता था।
वैसे भी, एक सरल उपाय है कि यह दर्शाता है सरल Makefile अवधारणाओं होगा:
HEADERS = program.h headers.h
default: program
program.o: program.c $(HEADERS)
gcc -c program.c -o program.o
program: program.o
gcc program.o -o program
clean:
-rm -f program.o
-rm -f program
(ध्यान रखें कि अंतरिक्ष खरोज करने के बजाय टैब की आवश्यकता बनाने में रखना है, ताकि ठीक करना सुनिश्चित करें की प्रतिलिपि बनाते हो)
हालाँकि, और अधिक सी फ़ाइलों का समर्थन करने के लिए, आप उनमें से प्रत्येक के लिए नए नियमों बनाने के लिए होगा। इस प्रकार, सुधार करने के लिए:
HEADERS = program.h headers.h
OBJECTS = program.o
default: program
%.o: %.c $(HEADERS)
gcc -c $< -o [email protected]
program: $(OBJECTS)
gcc $(OBJECTS) -o [email protected]
clean:
-rm -f $(OBJECTS)
-rm -f program
मैं की तरह $ (सीसी) चर को छोड़ते हुए द्वारा इस रूप में संभव के रूप में सरल बनाने के लिए और $ (CFLAGS) आम तौर पर makefiles में देखा जाता है कि कोशिश की। यदि आप इसे समझने में रुचि रखते हैं, तो मुझे आशा है कि मैंने आपको उस पर अच्छी शुरुआत की है।
यहाँ Makefile मैं सी स्रोत के लिए उपयोग करना चाहते हैं। इसका इस्तेमाल करने के लिए स्वतंत्र महसूस:
TARGET = prog
LIBS = -lm
CC = gcc
CFLAGS = -g -Wall
.PHONY: default all clean
default: $(TARGET)
all: default
OBJECTS = $(patsubst %.c, %.o, $(wildcard *.c))
HEADERS = $(wildcard *.h)
%.o: %.c $(HEADERS)
$(CC) $(CFLAGS) -c $< -o [email protected]
.PRECIOUS: $(TARGET) $(OBJECTS)
$(TARGET): $(OBJECTS)
$(CC) $(OBJECTS) -Wall $(LIBS) -o [email protected]
clean:
-rm -f *.o
-rm -f $(TARGET)
यह मेकअप उपयोगिता की वाइल्डकार्ड और patsubst सुविधाओं का उपयोग करता स्वचालित रूप से, वर्तमान निर्देशिका में ग और ज फ़ाइलों को शामिल करने, जिसका अर्थ है जब आप अपने निर्देशिका के लिए नए कोड फ़ाइलें जोड़ते हैं, आप मेकफ़ाइल को अपडेट नहीं करना होगा। हालांकि, अगर आप उत्पन्न निष्पादन योग्य, पुस्तकालयों, या संकलक झंडे के नाम बदलना चाहते हैं, तो आप सिर्फ चर को संशोधित कर सकते हैं।
या तो मामले में, autoconf का उपयोग नहीं करते, कृपया। मैं तुमसे भीक मांगता हूँ! :)
तकनीकी रूप से सही होने के लिए, मेरा मानना है कि आपको कमांड लाइन से उपयोग किए जाने वाले उन लक्ष्यों के लिए '.PHONY: सभी डिफ़ॉल्ट साफ़ करें' का उपयोग करना चाहिए। इसके अलावा, Autoconf/Automake वह बुरा नहीं है। निश्चित रूप से, वे भयानक महसूस करते हैं, और उनके लिए उपयोग करना एक ईंट की दीवार के माध्यम से अपने सिर को मजबूर करने के रूप में मजेदार है, लेकिन वे काम करते हैं, और वे अच्छी तरह से विकसित होते हैं, और वे आपके अधिकांश अड्डों को पोर्टेबिलिटी तक कवर करेंगे, और एक बार जब आप अपने भयानक डिजाइन में उपयोग कर लेंगे तो अंत में आपके जीवन को बहुत आसान बना देगा। –
मुझे लगता है कि यह काम करता है, लेकिन मैंने सोचा कि अगर मैंने टर्मिनल पर "मेक" टाइप किया है तो प्रोग्राम चलाना चाहिए। यह मुझे मिलता है: gcc statsh.o -Wall -lm -o prog क्या प्रोग्राम बनाना और निष्पादित करना संभव है? – user69514
आप ओपनएमएम फ्लैग -फॉपेंम्प – MySchizoBuddy