20.打造专业的编译环境(上)

Posted 阿弥陀佛.a

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了20.打造专业的编译环境(上)相关的知识,希望对你有一定的参考价值。


先使用模块下的makefile编译模块代码,build存储编译的结果






.PHONY : all

DIR_BUILD := /home/delphi/make/build
DIR_COMMON_INC := /home/delphi/make/common/inc

DIR_SRC := src
DIR_INC := inc

TYPE_INC := .h
TYPE_SRC := .c
TYPE_OBJ := .o
TYPE_DEP := .dep

AR := ar
ARFLAGS := crs

CC := gcc
CFLAGS := -I$(DIR_INC) -I$(DIR_COMMON_INC)

ifeq ($(DEBUG),true)
CFLAGS += -g
endif

#当前文件夹的绝对路径
MODULE := $(realpath .)
#去掉前缀,得到common文件名
MODULE := $(notdir $(MODULE))
#给common加上前缀
DIR_OUTPUT := $(addprefix $(DIR_BUILD)/, $(MODULE))

OUTPUT := $(MODULE).a
OUTPUT := $(addprefix $(DIR_BUILD)/, $(OUTPUT))

SRCS := $(wildcard $(DIR_SRC)/*$(TYPE_SRC))
OBJS := $(SRCS:$(TYPE_SRC)=$(TYPE_OBJ))
OBJS := $(patsubst $(DIR_SRC)/%, $(DIR_OUTPUT)/%, $(OBJS))
DEPS := $(SRCS:$(TYPE_SRC)=$(TYPE_DEP))
DEPS := $(patsubst $(DIR_SRC)/%, $(DIR_OUTPUT)/%, $(DEPS))

vpath %$(TYPE_INC) $(DIR_INC)
vpath %$(TYPE_INC) $(DIR_COMMON_INC)
vpath %$(TYPE_SRC) $(DIR_SRC)

-include $(DEPS)

all : $(OUTPUT)
	@echo "Success! Target ==> $(OUTPUT)"
	
$(OUTPUT) : $(OBJS)
	$(AR) $(ARFLAGS) $@ $^
	
$(DIR_OUTPUT)/%$(TYPE_OBJ) : %$(TYPE_SRC)
	$(CC) $(CFLAGS) -o $@ -c $(filter %$(TYPE_SRC), $^)
	
	
$(DIR_OUTPUT)/%$(TYPE_DEP) : %$(TYPE_SRC)
	@echo "Creating $@ ..."
	@set -e; \\
	$(CC) $(CFLAGS) -MM -E $(filter %$(TYPE_SRC), $^) | sed 's,\\(.*\\)\\.o[ :]*,$(DIR_OUTPUT)/\\1$(TYPE_OBJ) $@ : ,g' > $@

以上是关于20.打造专业的编译环境(上)的主要内容,如果未能解决你的问题,请参考以下文章

make--打造专业的编译环境

打造专业的编译环境(十四)

22.打造专业的编译环境(下)

21.打造专业的编译环境(中)

第二十一课 打造专业的编译环境(中)

第二十二课 打造专业的编译环境(下)