由于* .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)
答案 0 :(得分:1)
除了使用明确放置的目标文件的@macs建议之外,GNU make的vpath指令可以帮助你:
vpath %.h $(IDIR)
vpath %.o $(ODIR)
$(ODIR)/keyword_match_test.o : keyword_match_test.c keyword_match.h