سؤال

ودعم لديك برنامج 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 يعتمد على هذين) - وهذا هو لأنه ليس هناك "نظيفة" وسيلة للحصول على ملف وسيط ل تبعيات الرأس.

ونادرا ما وضع رؤوس القياسية إلى ملفات جعل ببساطة لأنهم لا يتوقع أن تتغير - اذا لم يفعلوا (مترجم جديد)، فقط نظيفة وجعل جديدة

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top