烟台百度网站建设,企业门户样式,上海建筑装饰集团有限公司,赤蚁网站建设目录
介绍
修改前的最新代码和框架
学习和修改
最终版本 介绍
--------------------------------------------------------------------------------------------------------------------------
https://www.cnblogs.com/wittxie/p/9836097.html 上次那个虽然能完成基本…目录
介绍
修改前的最新代码和框架
学习和修改
最终版本 介绍
--------------------------------------------------------------------------------------------------------------------------
https://www.cnblogs.com/wittxie/p/9836097.html 上次那个虽然能完成基本的编译功能了但是还是太low啦今天来优化一下找到一篇感觉不错的文章我们来学习一下依旧是配合linux源码的makefile框架只是这次会参考一下上面链接的思想。 其实他用的也是linux的makefile的管理思想编译进行层层调用。
修改前的最新代码和框架 MAJOR 0 MINOR 0 PATCH 0 NAME tianyu.xin ROOTFILE $(shell pwd) OUTPUTFILE $(ROOTFILE)/OUTPUT SRC $(wildcard *.c) OBJ $(patsubst %.c,%.o,$(SRC)) OUTPUT hardware_simulation APP_SRCS $(wildcard ../APP/src/*.c) APP_OBJS $(APP_SRCS:../APP/src/%.c%.o) SHOW_SRCS $(wildcard ../show/src/*.c) SHOW_OBJS $(SHOW_SRCS:../show/src/%.c%.o) HARDWARE_SRCS $(wildcard ../hardware/src/*.c) HARDWARE_OBJS $(APP_SRCS:../hardware/src/%.c%.o) INCLUDE -I../show/include -I../APP/include -I../hardware/include CC gcc CFLAGS -Wall -Werror $(INCLUDE) # Aesthetic treatment # log management ifeq ($(origin V), command line) KBUILD_VERBOSE $(V) endif ifndef KBUILD_VERBOSE KBUILD_VERBOSE 0 endif ifeq ($(KBUILD_VERBOSE),1) quiet Q else quietquiet_ Q endif all: $(OUTPUT) # $(Q)$(CURDIR) $(OUTPUT): $(APP_OBJS) $(SHOW_OBJS) $(Q)$(CC) $(CFLAGS) $^ -o $ %.o: ../APP/src/%.c $(Q)$(CC) $(CFLAGS) -c $ -o $ %.o: ../show/src/%.c $(Q)$(CC) $(CFLAGS) -c $ -o $ clean: rm -f $(OUTPUT) $(APP_OBJS) $(SHOW_OBJS) $(HARDWARE_OBJS) FORCE: $(Q)echo Forcing target .PHONY: FORCE clean all 上面就是目前的makefile 学习和修改 咱们的工程其实不需要那么复杂的编译框架一个makefile就够了但是我们要标准化一些把能拿走的都放到配置文件里。 这个up用的是这种方式直接把大家的配置文件都放到一起在主makefile那里
我们就都放到build目录下一个配置文件一个共用函数文件 刚刚新加个hardware的rm上面忘记改了直接给我把主函数删了人麻了还好vscode有缓存
MAJOR 0
MINOR 0
PATCH 0
NAME tianyu.xininclude ./make_conf.mk all: $(OUTPUT)
# $(Q)$(CURDIR) include ./make_fun.mkclean:rm -f $(OUTPUT) $(APP_OBJS) $(SHOW_OBJS) $(HARDWARE_OBJS)FORCE:$(Q)echo Forcing target.PHONY: FORCE clean all修改后makefile文件就变成这样了
这俩makefile的头文件把之前配置的东西都拿走了。 然后试一试昨天加的打印编译过程功能 在试试我新加的功能 我把clean命令拆成了两个全部清除和只清除中间文件
然后我把所有的中间文件和目标文件都放到了OUTPUT目录下 现在代码可以进一步简化了
有的文件单纯就是描述文件没有.o文件所以会导致mv的时候报错
2/dev/null 可以用这个把标准错误定向到空 现在代码还有个问题就是我们的执行只能在build目录下所以们在优化一下 ROOT_DIR ..
OUTPUTFILE $(ROOT_DIR)/OUTPUT然后我们再来加个打印头
# Silent printing is always required here
show:echo --------------------------------------------------------------echo ----------------------Build Start-----------------------------echo --------------------------------------------------------------echo Version: $(MAJOR).$(MINOR).$(PATCH)\necho Author: $(NAME)\n 还有颜色输出 这个可以参考我之前的一个文章设置对应颜色
http://t.csdnimg.cn/9dUHY
ifeq ($(filter debug,$(MAKECMDGOALS)),1)DEBUG -g
elseDEBUG
endifCC gcc
CFLAGS -Wall -Werror $(DEBUG) $(INCLUDE)
现在有一个问题我像上面这样定义没有效果像下面这样就可以
ifeq ($(filter debug,$(MAKECMDGOALS)),1)CFLAGS -Wall -Werror -g $(INCLUDE)
elseCFLAGS -Wall -Werror $(DEBUG) $(INCLUDE)
endifCC gcc算了debug和waring的开关问题留到下次解决好了 最终版本 MAJOR 0
MINOR 0
PATCH 0
NAME tianyu.xinROOT_DIR ..
OUTPUTFILE $(ROOT_DIR)/OUTPUTinclude $(ROOT_DIR)/build/make_conf.mk all: show $(OUTPUT)$(Q)mkdir -p $(OUTPUTFILE)$(Q)mv $(OUTPUT) ./*.o $(OUTPUTFILE)include $(ROOT_DIR)/build/make_fun.mk# Silent printing is always required here
show:echo --------------------------------------------------------------echo ----------------------Build Start-----------------------------echo --------------------------------------------------------------echo Version: $(MAJOR).$(MINOR).$(PATCH)\necho Author: $(NAME)\nclean:rm -f $(OUTPUTFILE)/*.oclean_all:rm -f $(OUTPUTFILE)/*FORCE:$(Q)echo Forcing target.PHONY: FORCE clean all show SRC $(wildcard *.c)
OBJ $(patsubst %.c,%.o,$(SRC))OUTPUT hardware_simulation
APP_SRCS $(wildcard $(ROOT_DIR)/APP/src/*.c)
APP_OBJS $(APP_SRCS:$(ROOT_DIR)/APP/src/%.c%.o)
SHOW_SRCS $(wildcard $(ROOT_DIR)/show/src/*.c)
SHOW_OBJS $(SHOW_SRCS:$(ROOT_DIR)/show/src/%.c%.o)
HARDWARE_SRCS $(wildcard $(ROOT_DIR)/hardware/src/*.c)
HARDWARE_OBJS $(HARDWARE_SRCS:$(ROOT_DIR)/hardware/src/%.c%.o)INCLUDE -I$(ROOT_DIR)/show/include -I$(ROOT_DIR)/APP/include -I$(ROOT_DIR)/hardware/includeifeq ($(filter debug,$(MAKECMDGOALS)),1)DEBUG
elseDEBUG -g
endifCC gcc
CFLAGS -Wall -Werror $(INCLUDE)
CFLAGS $(DEBUG)# Aesthetic treatment
ECHO_END:\033[0m
ECHO_GREEN:echo \033[32m
ECHO_RED:echo \033[31m
ECHO_YELLOW:echo \033[33m
ECHO_BLUE:echo \033[34m
ECHO_GREEN_YELLOW:echo \033[42;30m# log management
ifeq ($(origin V), command line)KBUILD_VERBOSE $(V)
endif
ifndef KBUILD_VERBOSEKBUILD_VERBOSE 0
endififeq ($(KBUILD_VERBOSE),1)quiet Q
elsequietquiet_Q
endif$(OUTPUT): $(APP_OBJS) $(SHOW_OBJS)$(Q)$(CC) $(CFLAGS) $^ -o $%.o: $(ROOT_DIR)/APP/src/%.c $(Q)$(CC) $(CFLAGS) -c $ -o $%.o: $(ROOT_DIR)/show/src/%.c$(Q)$(CC) $(CFLAGS) -c $ -o $