具有不同目录中的文件的通用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

我想为以下体系结构开发一个通用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 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