बनाने के लिए मैं कोई समस्या नहीं के साथ एक सरल Makefile चला रहा हूँ:Makefile सी उपनिर्देशिका नियम obj
CC=gcc
CFLAGS= -std=c99 -ggdb -Wall -I.
DEPS = hellomake.h
OBJ = hellomake.o hellofunc.o
%.o: %.c $(DEPS)
$(CC) -c -o [email protected] $< $(CFLAGS)
hellomake: $(OBJ)
gcc -o [email protected] $^ $(CFLAGS)
फ़ाइलें मुख्य परियोजना की निर्देशिका में हैं:
./project/Makefile
./project/hellomake.c
./project/hellomake.h
तब मैं संगठित फ़ाइलों की कोशिश की
./project/Makefile
./project/src/hellomake.c
./project/include/hellomake.h
और अतिरिक्त उप निर्देशिकाओं निर्देशिका:, और तरह बातें डाल
012,./project/lib
./project/obj
फिर Makefile का नया संस्करण:
IDIR =include
CC=gcc
CFLAGS= -std=c99 -ggdb -Wall -I$(IDIR)
ODIR=obj
LDIR =lib
LIBS=-lm
_DEPS = hellomake.h
DEPS = $(patsubst %,$(IDIR)/%,$(_DEPS))
_OBJ = hellomake.o hellofunc.o
OBJ = $(patsubst %,$(ODIR)/%,$(_OBJ))
$(ODIR)/%.o: %.c $(DEPS)
$(CC) -c -o [email protected] $< $(CFLAGS)
hellomake: $(OBJ)
gcc -o [email protected] $^ $(CFLAGS) $(LIBS)
.PHONY: clean
clean:
rm -f $(ODIR)/*.o *~ core $(INCDIR)/*~
मैं जीसीसी संकलक के साथ Emacs का उपयोग कर लिनक्स पर संकलन कर रहा हूँ:
$ gcc --version
gcc (Ubuntu/Linaro 4.6.3-1ubuntu5) 4.6.3
फिर, मैं पर Emacs चलाएँ:
<Esc>
x
compile
make
और यह संदेश देता है:
"./project/src/" -*-
make: *** No rule to make target `obj/hellomake.o', needed by `hellomake'. Stop.
Compilation exited abnormally with code 2 at Wed Oct 3 17:10:01
मेकफ़ाइल फ़ाइल में शामिल करने के लिए कौन सा नियम गुम होना चाहिए?
सभी टिप्पणियां और सुझाव अत्यधिक सराहना की जाती हैं।
आपके सुझाव के लिए धन्यवाद, यह कोड में जोड़ा गया है। फिर संकलक शिकायत करता है:
make -k
make: *** No rule to make target `src/hellomake.c', needed by `obj/hellomake.o'.
make: *** No rule to make target `../include/hellomake.h', needed by `obj/hellomake.o'.
make: Target `obj/hellomake.o' not remade because of errors
कुछ अन्य सुझाव?
अग्रिम धन्यवाद!
$(ODIR)/%.o: %.c $(DEPS)
करने के लिए::
$(OBJ): $(ODIR)/%.o: src/%.c $(DEPS)
यह $(OBJ)
चर में सभी वस्तुओं के लिए एक नियम बनाता है
'प्रोजेक्ट/ओबीजे' 'प्रोजेक्ट/src/obj' –
हैलो स्टीव-ओ से अधिक समझदार होगा। धन्यवाद! मैंने आपके द्वारा सुझाए गए परिवर्तन को बनाया है। – ThreaderSlash