سؤال
ودعم لديك برنامج C شملت بعض الملفات، ويتكون بعض احدا تلو البعض الآخر، وذلك على النحو التالي:
----------------------------------------
File | Included files
----------------------------------------
main.c | stdio.h, table.h
----------------------------------------
list.c | list.h
----------------------------------------
symbol.c | symbol.h
----------------------------------------
table.c | table.h
----------------------------------------
table.h | symbol.h, list.h
----------------------------------------
والرجاء مساعدتي في إنشاء MAKEFILE، شكرا جزيلا لك! هذا هو بلدي ماكيفيلي، ولكن هناك مشكلة؟ الذي يمكن تصحيح هذه المشاكل، وذلك بفضل!
hello: main.o table.o
gcc main.o table.o -o hello
main.o: main.c table.h
gcc -c main.c
table.o: table.c table.h
gcc -c table.c
symbol.o: symbol.c symbol.h
gcc -c symbol.c
list.o: list.c list.h
gcc -c list.c
clean:
rm hello *.o
المحلول
وهنا بداية، وليس بالضبط كيف المهنية من شأنه أن يفعل ذلك، ولكن جيدة لمستوى المبتدئين:
hello: main.o list.o symbol.o table.o
gcc -o hello main.o list.o symbol.o table.o
main.o: main.c table.h symbol.h list.h
gcc -c -o main.o main.c
list.o: list.c list.h
gcc -c -o list.o list.c
symbol.o: symbol.c symbol.h
gcc -c -o symbol.o symbol.c
table.o: table.c table.h symbol.h list.h
gcc -c -o table.o table.c
clean:
rm hello *.o
والمشكلة محددة مع MAKEFILE الخاص بك معين هو أنك لا ربط في كل الملفات الكائن. لأن main.c
يشمل table.h
ويشمل table.h
symbol.h
وlist.h
، فإن البرنامج يحتاج بالتأكيد إلى ربط symbol.o
وlist.o
كذلك.
وكما انها ممارسة جيدة لمتابعة تبعيات رأس (على سبيل المثال، main.o
يعتمد على table.h
<م> و م> symbol.h/list.h
لtable.h
يعتمد على هذين) - وهذا هو لأنه ليس هناك "نظيفة" وسيلة للحصول على ملف وسيط ل تبعيات الرأس.
ونادرا ما وضع رؤوس القياسية إلى ملفات جعل ببساطة لأنهم لا يتوقع أن تتغير - اذا لم يفعلوا (مترجم جديد)، فقط نظيفة وجعل جديدة