具有不同目录中的文件的通用makefile
我想为以下体系结构开发一个通用makefile:具有不同目录中的文件的通用makefile,makefile,Makefile,我想为以下体系结构开发一个通用makefile: 30/04/2015 18:10 <REP> . 30/04/2015 18:10 <REP> .. 30/04/2015 18:08 <REP> exe 30/04/2015 17:22 <REP> headers 30/04/2015 17:53 726 make
30/04/2015 18:10 <REP> .
30/04/2015 18:10 <REP> ..
30/04/2015 18:08 <REP> exe
30/04/2015 17:22 <REP> headers
30/04/2015 17:53 726 makefile.txt
30/04/2015 18:08 <REP> objects
30/04/2015 17:53 <REP> sources
并创建两个文件:
objects/main.o
Mydirectory/Output.exe
层次结构中的makefile在哪里?你的目标文件应该放在哪里?您似乎没有在任何地方使用
.d
文件。默认目标是$(输出)
,但它不使用exe
目录或以.exe
结尾。运行make
时会出现什么错误?目前我将所有输出文件(*.o和*.exe)都放在Mydirectory中。我假设您的错误是找不到目标文件目标的源文件?这是因为您的%.o:%.c
模式目标在必备部分中没有包含源路径。make的输出是:../Mydirectory/sources/main.c:1:22 myheader.h:没有这样的文件或目录make:**[../Mydirectory/sources/main.o]错误1So i必须是%.o:%.c%.h而不是%.o:%.c?
30/04/2015 17:22 <REP> .
30/04/2015 17:22 <REP> ..
30/04/2015 17:22 20 myheader.h
SRCDIRS = ../Mydirectory/sources
HDRDIRS = ../Mydirectory/headers
SRCEXTS = .c
HDREXTS = .h
OUTPUT = Output
CC= gcc
SOURCES = $(foreach file,$(SRCDIRS),$(wildcard $(addprefix $(file)/*,.c)))
HEADERS = $(foreach file,$(HDRDIRS),$(wildcard $(addprefix $(file)/*,.h)))
OBJS = $(addsuffix .o, $(basename $(SOURCES)))
DEPS = $(OBJS:.o=.d)
DEP_OPT = -M
DEPEND = $(CC) $(DEP_OPT)
DEPEND.d = $(subst -g ,,$(DEPEND))
COMPILE.c = $(CC) -c -I $(HDRDIRS)
LINK.c = $(CC)
all: $(OUTPUT)
%.d:%.c
[TAB]@echo -n $(dir $<) > $@
@$(DEPEND.d) $< >> $@
objs:$(OBJS)
%.o:%.c
[TAB]$(COMPILE.c) $< -o $@
$(OUTPUT):$(OBJS)
[TAB]$(LINK.c) $(OBJS) -o $@
clean:
[TAB]$(RM) $(OBJS) $(OUTPUT).exe
gcc -c -I ../Mydirectory/headers ../Mydirectory/sources/main.c -o ../Mydirectory/sources/main.o
gcc ../Mydirectory/sources/main.o -o Output
objects/main.o
Mydirectory/Output.exe