makefile文件包括在其他目录下的* .h文件 [英] makefile include *.h file in other directory

查看:550
本文介绍了makefile文件包括在其他目录下的* .h文件的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

由于*的.o,* h文件和* .c文件都存储在不同的目录,我需要增加preFIX $(ODIR)或$(IDIR)每次我写的.o *或* .h文件中?

有没有一种优雅的方式做到这一点?

也许有些类似方式$(IDIR)/ {A.H,b.h,c.h}?

这是生成文件的示例:

  GCC =海湾合作委员会
CFLAGS =
CFLAGS_DEBUG_STRICT = -Wall迂腐-ansi -ggdb -DDEBUG
CFLAGS_DEBUG = -Wall -ggdb -DDEBUG
LFLAGS =
SDIR = ../src
ODIR = OBJ
IDIR = ../include
INCLUDES =
LIDR = ../lib/
LIBS =
所有: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

Since the *.o, *.h file and *.c files are stored in different directories, do I need add prefix $(ODIR) or $(IDIR) everytime I write a *.o or *.h file?

Is there a graceful way to do it?

Perhaps some way like $(IDIR)/{a.h, b.h, c.h}?

This is the sample of 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)

解决方案

In addition to @macs suggestion with explicitely placed object files, GNU make's vpath directive can help you:

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

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

这篇关于makefile文件包括在其他目录下的* .h文件的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆