我需要创建Makefile来编译带有许多子目录的源文件(source目录进入5级深度),我需要将目标文件放在镜像目录中。到目前为止,我已经创建了这个Makefile:Makefile镜像构建目录
CC := gcc.exe
AS := as.exe
CFLAGS = -DCORE_SW_VERSION='"$(CORE_SW_VERSION)"' -Wall -mA6 -c -fmessage-length=0 -Hsdata0
CFLAGS += -fgnu89-inline -mno-volatile-cache $(INCLUDE) -Hon=each_function_in_own_section -Xcrc -std=c99 -O1
CORE_SW_VERSION:=CORE.07.01.04.01.03.01.R
HAL_SW_VERSION:=16.01.06.01.06.00
MODE_CORE := dev
MODE_HAL := dev
OBJDIR := $(shell pwd)/$(TARGET12) #TARGET12 is a make parameter
INCLUDE := $(shell cat ./$(TARGET12)_include.txt)
SOURCEDIR := ../sources
CSRC := $(shell find $(SOURCEDIR) -name '*.c')
EXCLUDES := $(shell cat ./$(TARGET12)_exclude.txt)
OBJ := $(CSRC:.c=.o)
OBJS := $(patsubst ../%.c,$(OBJDIR)/%.o,$(CSRC))
.PHONY: $(TARGET12)
$(TARGET12): $(OBJS)
$(AR) -r $(CORE_SW_VERSION).a $(OBJS)
$(OBJS): $(CSRC)
mkdir -p $(dir [email protected])
$(CC) $(CFLAGS) $< -o $(patsubst ../%,$(OBJDIR)/%,[email protected])
如果我定义规则$(OBJS)
这种方式,$<
总是在$(CSRC)
第一.c文件。
如果我定义$(OBJS)
这样:
$(OBJS): %.o: %.c
mkdir -p $(dir [email protected])
$(CP) $< [email protected]
我得到的错误是没有规则,使目标.c文件。但是我看到make正在构建镜像目录中查找.c文件,它应该查看源代码目录。你可能知道这可以如何安排?
谢谢你提前!
lesmana,谢谢您的回复!其实,这是 $(OBJS):$(OBJDIR)/%○:。../%.c \t @mkdir -p $(DIR $ @) \t $(CC)$(CFLAGS)$ < -o $ @ 完成了这份工作!非常感谢!你帮了很多! – Nikola 2011-04-14 15:06:03