繁体   English   中英

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

[英]makefile include *.h file in other directory

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

有一个优美的方法吗?

也许像$(IDIR)/ {ah,bh,ch}这样的方式?

这是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)

除了@macs建议与明确放置的目标文件外,GNU make的vpath指令还可以帮助您:

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

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

您可以执行以下操作:

C_SRC = foo.c bar.c
C_OBJ = $(C_SRC:%.c=../obj/%.o)
INCLUDES = $(wildcard *.hpp) $(wildcard *.h) $(wildcard ../../general/*.hpp)

$(C_OBJ): $(C_SRC)
          $(C) $(CFLAGS) -o $(C_OBJ) -c $(C_SRC)

注意../obj/C_OBJ 因此,您将所有源文件提供给Makefile,它将自动将扩展名*.c替换为*.o和所需的目录。 您可以对include进行相同的操作,也可以如图所示使用通配符。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM