我必须创建一个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
答案 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只运行最佳匹配。
约翰