इससे पहले कि आप मेकफ़ाइल के साथ कुछ भी कर सकें, आपको यह पता होना चाहिए कि बिना मेकफ़ाइल के इसे कैसे किया जाए।
चूंकि आप जीसीसी का उपयोग कर रहे हैं, तो मुझे लगता है कि आपका स्रोत कोड सी ++ है।
आपने हमें बताया नहीं है कि आपकी निर्देशिका संरचना कैसी दिखती है, इसलिए मुझे लगता है कि आपके पास दो निर्देशिकाओं में तीन स्रोत फ़ाइलें हैं: primary/main.cc
, other/foo.cc
और other/bar.cc
। (हम बाद में foo.h
जैसे हेडर फ़ाइलों से निपट सकते हैं।) और आप myApp
बनाना चाहते हैं।
कदम 1: यह
कर करके हाथ एक आदेश में ऐसा करने के लिए, आप उपयोग कर सकते हैं:
gcc -Wall primary/main.cc other/foo.cc other/bar.cc -o myApp
इस तीन स्रोत फ़ाइलें संकलन होगा और बाइनरी वस्तुओं में एक साथ लिंक निष्पादन योग्य myApp
।
कदम 2: यह टुकड़े में कर के बजाय एक आदेश के साथ निर्माण की (। इस प्रयास नहीं जब तक आप पूरी तरह से काम करने के लिए पिछले चरण प्राप्त कर सकते हैं करें)
, आप एक मध्यवर्ती चरण ले सकता है, संकलन द्विआधारी वस्तु फाइलों में स्रोत फ़ाइलें:
gcc -Wall -c primary/main.cc -o primary/main.o
gcc -Wall -c other/foo.cc -o other/foo.o
gcc -Wall -c other/bar.cc -o other/bar.o
यह alpha/main.o
, beta/foo.o
और beta/bar.o
का उत्पादन करेगा। संकलक, के बारे में foo
और bar
एक main()
समारोह की कमी की शिकायत नहीं करेगा क्योंकि एक वस्तु फ़ाइल एक जरूरत नहीं है। फिर एक निष्पादन में एक साथ वस्तुओं लिंक:
gcc -Wall primary/main.o other/foo.o other/bar.o -o myApp
कदम 3: यह कर स्थानीय स्तर पर (यह प्रयास न करें जब तक आप पूरी तरह से काम करने के लिए पिछले चरण प्राप्त कर सकते हैं।)
वैसे ही जैसे पिछले चरण, लेकिन हम primary/
और other/
में कार्य:
cd primary
gcc -Wall -c main.cc -o main.o
cd ../other
gcc -Wall -c foo.cc -o foo.o
gcc -Wall -c bar.cc -o bar.o
cd ..
gcc -Wall primary/main.o other/foo.o other/bar.o -o myApp
चरण 4: एक Makefile (का उपयोग करते हुए इस प्रयास न करें जब तक आप पूरी तरह से काम करने के लिए पिछले चरण प्राप्त कर सकते हैं।)
हम एक makefile कदम 1 प्रदर्शन हो सकता है, लेकिन वास्तव में आवश्यक नहीं है। primary
में एक makefile लिखें (अर्थातprimary/makefile
) इस तरह:।
main.o:
gcc -Wall -c main.cc -o main.o
(gcc...
की fromt में यही खाली स्थान के एक टैब है)
अब इस प्रयास करें:
cd primary
make
cd ../other
gcc -Wall -c foo.cc -o foo.o
gcc -Wall -c bar.cc -o bar.o
cd ..
gcc -Wall primary/main.o other/foo.o other/bar.o -o myApp
कदम 5: कई Makefiles का उपयोग करना (न करें इसे तब तक प्रयास करें जब तक कि आप पूरी तरह से काम करने के लिए पिछले चरण को प्राप्त नहीं कर सकते।)
other/makefile
लिखें:
both: foo.o bar.o
foo.o:
gcc -Wall -c foo.cc -o foo.o
bar.o:
gcc -Wall -c bar.cc -o bar.o
और शीर्ष निर्देशिका है, जहां आप myApp
निर्माण कर रहे हैं में एक makefile:
myApp:
gcc -Wall primary/main.o other/foo.o other/bar.o -o myApp
अब इस प्रयास करें:
cd primary
make
cd ../other
make
cd ..
make
कदम 6: एक Makefile दूसरों को कॉल का प्रयोग (जब तक आप पूरी तरह से काम करने के लिए पिछले चरण प्राप्त नहीं कर लेते तब तक इसका प्रयास न करें।)
संपादित शीर्ष makefile:
myApp:
cd primary; make
cd other; make
gcc -Wall primary/main.o other/foo.o other/bar.o -o myApp
अब कोशिश:
make
तो यह सब काम करता है, तुम्हारे पास क्या है एक कच्चे लेकिन प्रभावी makefile प्रणाली है। जब आप प्रशिक्षण पहियों को बंद करने के लिए तैयार होते हैं, तो कई परिशोधन संभव होते हैं।
संपादित करें:
उप-निर्देशिका (जैसे other/
) में कई स्रोत फ़ाइलों देखते हैं और आप हाथ से शीर्ष makefile में एक सूची बनाए रखने के लिए नहीं करना चाहते हैं, वहाँ इसे संभाल करने के लिए कई तरीके हैं। यह एक है:
OTHER_SOURCES := $(wildcard other/*.cc)
OTHER_OBJECTS := $(OTHER_SOURCES:.cc=.o)
myApp:
cd primary; make
cd other; make
gcc -Wall primary/main.o $(OTHER_OBJECTS) -o myApp
लेकिन आपको इन मेकफ़ाइलों को काम करने और समझने से पहले, और अधिक सुव्यवस्थित करने की कोशिश करने से पहले उन्हें समझना चाहिए।
[विभिन्न निर्देशिकाओं में स्रोत फ़ाइलों के साथ मेकफ़ाइल] का संभावित डुप्लिकेट (http://stackoverflow.com/questions/1139271/makefiles-with-source-files-in- अलग- निर्देशिकाएं) –