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.打造专业的编译环境(上)的主要内容,如果未能解决你的问题,请参考以下文章