2012-08-03 16 views
8

प्रत्येक बार जब मैं पुस्तकालयों का उपयोग कर प्रोग्राम निष्पादित करना चाहता हूं तो मुझे टर्मिनल पर इन 4 आदेशों को चलाने के लिए है।लाइब्रेरी के लिए मेकफ़ाइल

लाइनों

cc -m32 -c mylib.c 
ar -rcs libmylib.a mylib.o 
cc -m32 -c prog.c 
cc -m32 prog.o -L. -lmylib 
./a.out 

हैं मैं ऊपर आदेश के लिए एक makefile कैसे कर सकता हूँ और यह चला सकता हूँ? एक विस्तृत प्रक्रिया की सराहना की जाएगी। धन्यवाद।


संपादित करें:

a.out: prog.o libmylib.a 
     cc prog.o -L. -lmylib 

prog.o: prog.c mylib.h 

libprint_int.a: mylib.o 
     ar -rcs libmylib.a mylib.o 

print_int.o: mylib.c mylib.h 

clean: 
     rm a.out prog.o libmylib.a mylib.o 

इसका कारण यह है कि मैं टैब के बजाय रिक्त स्थान में इस्तेमाल किया लाइन 2 पर एक त्रुटि दिया: यहाँ समाधान है।

+3

यहां थोड़ी सी अनावश्यकता है। स्थैतिक पुस्तकालयों के साथ, यदि आप पहले '.'' फ़ाइल को पहले भरकर उन्हें' .o' फ़ाइलों को सीधे एप्लिकेशन में लिंक करते हैं, तो आपको वही परिणाम मिल जाएगा। एक स्थिर लाइब्रेरी एक साथ चिपकने वाली '.o' फ़ाइलों के समूह से थोड़ी अधिक है, आखिरकार। –

उत्तर

7

कुछ की तरह:

program_NAME := a.out 

SRCS = mylib.c prog.c 

.PHONY: all 

all: $(program_NAME) 

$(program_NAME): $(SRCS) 
    ar -rcs libmylib.a mylib.o 
    cc -m32 prog.o -L. -lmylib 

इस लोगों को मिल सकता है आप आरंभ

सिर्फ makefiles अपने आप उपयोग शुरू किया और मुझे लगता है कि वे बहुत मुश्किल कर रहे हैं, लेकिन एक बार आप उन्हें काम करना आरंभ कर वे जीवन बहुत आसान बनाने के (समस्या कीड़े से भरा है लेकिन अधिक अनुभवी में से कुछ अतः लोक समस्या होगी) उन्हें ठीक

चलाने के लिए के रूप में मदद करने के लिए, सुनिश्चित करें कि आप 'Makefile' के रूप में फाइल को सेव करना सक्षम हो (जैसा भी मामला महत्वपूर्ण है)

तो cmd लाइन से (आप Makefile युक्त निर्देशिका करने के लिए सीडी को सुनिश्चित):

$ make 

यह thats!

अद्यतन

अगर मध्यवर्ती स्थिर पुस्तकालय ज़रूरत से ज़्यादा है आप इस तरह एक Makefile के साथ इसे छोड़ सकता है:

program_NAME := a.out 

SRCS = mylib.c prog.c 
OBJS := ${SRCS:.c=.o} 

CFLAGS += -m32 

program_INCLUDE_DIRS := 
program_LIBRARY_DIRS := 
program_LIBRARIES := mylib 

CPPFLAGS += $(foreach includedir,$(program_INCLUDE_DIRS),-I$(includedir)) 
LDFLAGS += $(foreach librarydir,$(program_LIBRARY_DIRS),-L$(librarydir)) 
LDFLAGS += $(foreach library,$(program_LIBRARIES),-l$(library)) 

CC=cc 

LINK.c := $(CC) $(CFLAGS) $(CPPFLAGS) $(LDFLAGS) 

.PHONY: all 

all: $(program_NAME) 

$(program_NAME): $(OBJS) 
    $(LINK.c) $(program_OBJS) -o $(program_NAME) 
+0

उपरोक्त में से कोई भी मेकफ़ाइल काम नहीं कर रहा है। –

+0

यह त्रुटि बनाता है मेकफ़ाइल: 25: *** लापता विभाजक। रूक जा। दूसरे और मेकफ़ाइल के लिए: 10: *** लापता विभाजक। रूक जा। पहले –

+0

के लिए कृपया –

0

मुझे लगता है कि मेकअप आदेश की आधिकारिक दस्तावेज से अधिक नहीं विस्तृत प्रक्रिया है: http://www.gnu.org/software/make/manual/make.html#Overview

मूल रूप से आप एक लक्ष्य बनाना होगा और बस में अपने आदेश डाल दिया। यदि आप 'मेक' टाइप करते हैं तो लक्ष्य 'सब' हो सकता है यदि आप इसे काम करना चाहते हैं। एक अच्छा मेकफ़ाइल निश्चित रूप से lib/स्रोत परिवर्धन पर लचीला रखने के लिए चर आदि का उपयोग करेगा।

1

सरल ट्यूटोरियल को समझने के लिए फ़ाइलों को बनाने के Cprogramming.com में उपलब्ध है। एक बार जब आप इसे समझने के माध्यम से हो जाते हैं तो आप make file मैनुअल के बावजूद जा सकते हैं।

+1

हालांकि यह लिंक प्रश्न का उत्तर दे सकता है, लेकिन यहां उत्तर के आवश्यक हिस्सों को शामिल करना बेहतर है और संदर्भ के लिए लिंक प्रदान करना बेहतर है। लिंक किए गए पृष्ठ में परिवर्तन होने पर लिंक-केवल उत्तर अमान्य हो सकते हैं। - [समीक्षा से] (/ समीक्षा/कम गुणवत्ता वाली पोस्ट/19056300) – NaN