मेरे पास निम्नलिखित मेकफाइल है जो मैं प्रोग्राम (कर्नेल, वास्तव में) बनाने के लिए उपयोग करता हूं जो मैं काम कर रहा हूं। इसकी खरोंच से और मैं इस प्रक्रिया के बारे में सीख रहा हूं, इसलिए यह बिल्कुल सही नहीं है, लेकिन मुझे लगता है कि इस बिंदु पर पर्याप्त शक्तिशाली है, जो मेरे अनुभव के लेखन के स्तर के लिए है।
AS = nasm
CC = gcc
LD = ld
TARGET = core
BUILD = build
SOURCES = source
INCLUDE = include
ASM = assembly
VPATH = $(SOURCES)
CFLAGS = -Wall -O -fstrength-reduce -fomit-frame-pointer -finline-functions \
-nostdinc -fno-builtin -I $(INCLUDE)
ASFLAGS = -f elf
#CFILES = core.c consoleio.c system.c
CFILES = $(foreach dir,$(SOURCES),$(notdir $(wildcard $(dir)/*.c)))
SFILES = assembly/start.asm
SOBJS = $(SFILES:.asm=.o)
COBJS = $(CFILES:.c=.o)
OBJS = $(SOBJS) $(COBJS)
build : $(TARGET).img
$(TARGET).img : $(TARGET).elf
c:/python26/python.exe concat.py stage1 stage2 pad.bin core.elf floppy.img
$(TARGET).elf : $(OBJS)
$(LD) -T link.ld -o $@ $^
$(SOBJS) : $(SFILES)
$(AS) $(ASFLAGS) $< -o $@
%.o: %.c
@echo Compiling $<...
$(CC) $(CFLAGS) -c -o $@ $<
#Clean Script - Should clear out all .o files everywhere and all that.
clean:
-del *.img
-del *.o
-del assembly\*.o
-del core.elf
इस मेकफाइल के साथ मेरा मुख्य मुद्दा यह है कि जब मैं एक हेडर फ़ाइल को संशोधित करता हूं जिसमें एक या अधिक सी फाइलें शामिल होती हैं, तो सी फाइलें फिर से नहीं बनाई जाती हैं। मैं अपनी सभी हेडर फ़ाइलों को अपनी सी फाइलों के लिए सभी निर्भरता होने के द्वारा इसे आसानी से ठीक कर सकता हूं, लेकिन इससे प्रभावी रूप से किसी भी समय मैंने पूरी तरह से प्रोजेक्ट का पुनर्निर्माण किया होगा जिससे मैंने हेडर फ़ाइल को बदल दिया / जोड़ा, जो बहुत ही सुंदर नहीं होगा।
जो मैं चाहता हूं वह केवल सी फ़ाइलों के लिए है जिसमें शामिल हैं हेडर फ़ाइल जिसे मैं फिर से बनाया जा सकता हूं, और पूरे प्रोजेक्ट के लिए फिर से लिंक किया जा सकता है। मैं सभी हेडर फ़ाइलों को लक्ष्य की निर्भरता होने के कारण लिंकिंग कर सकता हूं, लेकिन मैं यह पता नहीं लगा सकता कि सी फ़ाइलों को अमान्य कैसे बनाया जाए जब उनकी शामिल हेडर फाइलें नई हों।
मैंने सुना है कि जीसीसी के पास इसे संभव बनाने के लिए कुछ कमांड हैं (इसलिए मेकफाइल किसी तरह यह पता लगा सकता है कि किन फाइलों को फिर से बनाने की आवश्यकता है) लेकिन मैं अपने जीवन के लिए एक वास्तविक कार्यान्वयन उदाहरण नहीं देख सकता। क्या कोई ऐसा समाधान पोस्ट कर सकता है जो इस व्यवहार को मेकफाइल में सक्षम करेगा?
संपादित करें: मुझे स्पष्ट करना चाहिए, मैं व्यक्तिगत लक्ष्यों को डालने और प्रत्येक लक्ष्य रखने की अवधारणा से परिचित हूं। हेडर फ़ाइलों की आवश्यकता होती है। मुझे हर बार मेकफाइल को संपादित करने की आवश्यकता होती है, जिसमें मैं कहीं हेडर फ़ाइल शामिल करता हूं, जो थोड़ा दर्द होता है। मैं एक ऐसे समाधान की तलाश कर रहा हूं, जो हेडर फ़ाइल की निर्भरता को अपने दम पर प्राप्त कर सके, जो कि मैं काफी हद तक निश्चित हूं कि मैंने अन्य परियोजनाओं में देखा है।