大神帮我看看makefile
我想在当前目录下建立3个目录,分别是src,inc,out。makefile放在当前目录下。源文件在src,头文件在inc,怎么样能把我所有的输出文件都放到out里面? 自己写了个makefile 总是提示没有目标规则,求大神帮我看下 谢谢!(用的是sdcc编译器,.rel文件相当于.o文件)
SRC +=./src/main.c
SRC +=./src/add.c
CC = sdcc
AR = sdar
INCDIR =./inc
OUTDIR = ./out
SRCDIR =./src
ALLSRCBASE = $(notdir $(basename $(SRC)))
ALLOBJ = $(addprefix $(OUTDIR)/,$(addsuffix .rel, $(ALLSRCBASE)))
#OALLOBJ = $(addprefix $(SRCDIR)/,$(addsuffix .rel, $(ALLSRCBASE)))
all:target
#SUFFIXES += .rel .ihx
#rel:$(OUTDIR)/6800.rel
target:$(ALLOBJ)
$(ALLOBJ):%.rel:%.c
$(CC) -c $< -o $@ -I$(INCDIR)
clean:
-rm -f *.rel *.mem *.lst *.sym *.asm *.rst
# Listing of phony targets.
.PHONY : all clean 编译器 makefile sdcc
[解决办法]
INCDIR =./inc
OUTDIR = ./out
SRCDIR =./src
用shell扩展成绝对路径试试……
[解决办法]
编译过程中会在目录里跳来跳去的,相对路径会出问题
在makefile中使用shell命令把给定相对路径扩展成绝对路径,如果原本就是绝对路径的就不作处理!
u-boot中Makefile对输出目录的处理
# 检查make变量“O”是不是来自于命令行,
ifdef O
ifeq ("$(origin O)", "command line")
BUILD_DIR := $(O)
endif
endif
ifneq ($(BUILD_DIR),)
saved-output := $(BUILD_DIR)
# Attempt to create a output directory.
$(shell [ -d ${BUILD_DIR} ]
[解决办法]
mkdir -p ${BUILD_DIR})
# Verify if it was successful.
#确保BUILD_DIR里保存的是一个绝对路径
BUILD_DIR := $(shell cd $(BUILD_DIR) && /bin/pwd)
#如果路径不可达,文件夹不存在,给出错误并停止编译
$(if $(BUILD_DIR),,$(error output directory "$(saved-output)" does not exist))
endif # ifneq ($(BUILD_DIR),)