makefile包含其他目录中的* .h文件

时间:2011-12-19 08:46:37

标签: c makefile

由于* .o,*。h文件和* .c文件存储在不同的目录中,每次写* .o或* .h文件时是否需要添加前缀$(ODIR)或$(IDIR) ?

有优雅的方式吗?

也许某种方式如$(IDIR)/ {a.h,b.h,c.h}?

这是makefile的示例:

GCC = gcc
CFLAGS = 
CFLAGS_DEBUG_STRICT = -Wall pedantic -ansi -ggdb -DDEBUG 
CFLAGS_DEBUG = -Wall -ggdb -DDEBUG
LFLAGS = 
SDIR = ../src
ODIR = obj
IDIR = ../include
INCLUDES = 
LIDR = ../lib/
LIBS = 
all : keyword_match_test
keyword_match_test : $(ODIR)/keyword_match_test.o $(ODIR)/keyword_match.o 
  $(GCC) $(CFLAGS_DEBUG) -o $@ $+ 

$(ODIR)/keyword_match_test.o : keyword_match_test.c $(IDIR)/keyword_match.h
  $(GCC) $(CFLAGS_DEBUG) -c -o $@ $< -I$(IDIR) 

$(ODIR)/keyword_match.o : $(SDIR)/keyword_match.c $(IDIR)/keyword_match.h  $(IDIR)/global.h
  $(GCC) $(CFLAGS_DEBUG) -c -o $@ $< -I/usr/include/mysql -I$(IDIR)

1 个答案:

答案 0 :(得分:1)

除了使用明确放置的目标文件的@macs建议之外,GNU make的vpath指令可以帮助你:

vpath %.h $(IDIR)
vpath %.o $(ODIR)

$(ODIR)/keyword_match_test.o : keyword_match_test.c keyword_match.h