Makefile包含另一个make文件?

时间:2014-03-20 12:50:34

标签: makefile

我必须创建一个make文件,它依赖于其他一些make文件。 现在,另一个文件定义了目标。所以我问我是否可以在这两个文件中都有目标。

TARGET = 0

ifeq ($(TARGET),0) CC = gcc CFLAGS = -g -lpthread -lrt -O3 -Wall -lm else CC=arm-v7a15v3r1-linux-gnueabi-gcc CFLAGS = -lpthread -lrt -O3 -g -mcpu=cortex-a9 -ftree-vectorize endif

PNG_INC_DIR = lpng167/inc ZLIB_INC_DIR = zlib128/inc

DEFINES = -DZ_SOLO

pngsrc = lpng167/src/png.c\ lpng167/src/pngerror.c\ lpng167/src/pngget.c\ lpng167/src/pngmem.c\ lpng167/src/pngpread.c\ lpng167/src/pngread.c\ lpng167/src/pngrio.c\ lpng167/src/pngrtran.c\ lpng167/src/pngrutil.c\ lpng167/src/pngset.c\ lpng167/src/pngtrans.c

zlibsrc = zlib128/src/adler32.c\ zlib128/src/crc32.c\ zlib128/src/infback.c\ zlib128/src/inffast.c\ zlib128/src/inflate.c\ zlib128/src/inftrees.c\ zlib128/src/uncompr.c\ zlib128/src/zutil.c

testsrc = lpng167/src/pngtest.c

PNGOBJS = $(pngsrc:.c=.o) ZLIBOBJS = $(zlibsrc:.c=.o) TESTOBJS = $(testsrc:.c=.o) EXE = pngtest

all: $(EXE)

$(EXE):$(ZLIBOBJS) $(PNGOBJS) $(TESTOBJS) $(CC) $(CFLAGS) $(DEFINES) $(PNGOBJS) $(TESTOBJS) $(ZLIBOBJS) -o $(EXE)

%.o : %.c $(PNG_INC_DIR)/*.h $(ZLIB_INC_DIR)/*.h @echo $< @$(CC) $(CFLAGS) -I$(PNG_INC_DIR) -I$(ZLIB_INC_DIR) $(DEFINES) -c $< -o $@

.PHONY: clean clean: -@$(RM) -f $(ZLIBOBJS) $(PNGOBJS) $(TESTOBJS) $(EXE) 2> /dev/null

这是第一个定义自己的目标的make文件。 另一个make文件是一个格式太大的系统make文件,它根据机器类型定义动态目标。这是link。 没有目标的当前make文件是 EXECUTABLE := subM CCFILES := SubFilHost.cpp include ../../common/common_opencl.mk

我对这个make文件很新,而且我试图得到的越多,它就越混乱。 任何帮助都会感激不尽; 谢谢 PIYUSH

1 个答案:

答案 0 :(得分:1)

包含makefile与将makefile的内容剪切并粘贴到当前makefile中相同。因此,只要它们不冲突,您就可以在两个makefile中都有目标。每个makefile每个静态目标只能有一个配方。但是,您可以根据需要多次定义具有先决条件的目标。所以你可以这样做:

foo: bar1

foo: bar2
     echo "hello world"

你做不到:

foo:
    echo "hello world1"

foo:
    echo "hello world2"

(好的,你可以,但是吐出一些警告,只运行最后一条规则)。对于模式规则,您可以使用模式规则和静态规则来解析相同的目标。所以,你可以这样做:

%.o: %.c
    echo "used pattern rule"

foo.o: foo.c
    echo "used static rule"

在这种情况下,make将运行最佳匹配 - 这将是foo.c的静态规则。你也可以有多个与目标重叠的模式,make不会抱怨。在这种情况下,make只运行最佳匹配。

约翰