
[英]how to use makefile to include .a static library and .h file from another directory in C?
[英]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.