gcc 编译偷懒利器----makefile,亲测实用代码模板

  • 序言
    相信接触过Linux-c的伙伴们都清楚,我们在运行代码时不像其他语言一样拥有专有ide,运行点个三角图标就完事了,而linux-c就没有那么轻松了,可以说所有事都得自己亲历亲为,敲好了代码,你得先用gcc命令去编译它,然后运行编译后的文件才算完成代码运行效果展示。
    而平时敲些小文件,搞些小测试用gcc命令去编译还能接受,没那么麻烦,毕竟敲多熟练了,而一到项目中,如果你每个文件都自己编译敲一遍,再各种指定库路径,编译路径,.c文件路径,毫不夸张的说可以写篇文章了吧,哈哈,我前面写了个小项目,就用的gcc,那个编译命令写了四行长度,后面干脆把它扔到一个脚本中去,才好了很多,而脚本毕竟不是长久之计,可重用性太差。
    所以makefile 来了,只要往你的代码根目录创建个makefile 文件,然后写入些命令(吐槽:不错还是得亲力亲为…),直接make 就把繁杂的编译完成了。
  • 代码模板
#TOOLCHAIN = arm-linux-gcc					#arm开发板使用时打开

ifdef TOOLCHAIN								#选择gcc还是arm-linux-gccc
	CC = $(TOOLCHAIN)
else 
	CC = gcc
endif
					
ifeq ($(CC),gcc)							#根据不同的平台,选择不同的链接库 
	CFLAGS = -I./include  -L./lib -lmm -lgcc -lc
else
	CFLAGS = -I./include  -L./lib -lmm	#mm为库名
endif
SRC = $(wildcard  ./src/*.c  ./lib/*.c)		#寻找所有.c文件
ELF = ./bin/main							#指定可执行文件路径

OBJ = $(patsubst %.c, %.o, $(SRC))			#把.c 换成.o

$(ELF):$(OBJ)								#^:所有依赖-->OBJ ,@:生成目标放置地方,把.o放到ELF中,CFLAGS:选择库
	$(CC) $(OBJ) -o $@ $(CFLAGS)		

%.o:%.c										#^:由.o生成.c,CFLAGS:选择库
	$(CC) $< -o $@ -c  $(CFLAGS)
 
clean:										#清除可执行文件,重新编译
	$(RM) $(ELF) $(OBJ)				
.PHONY: clean


//后添加版本 2020.9.1
SRC = $(wildcard *.c)	#找到当前路径下面所有的.c结尾的文件名
OBJ = $(SRC:%.c=%.o)	#将SRC这个变量当中的.c尾缀变化为.o尾缀

image = out
CC = gcc

# COMP_FLAG = -L ../lib -ljpeg -lfreetype

$(image):$(OBJ)
	$(CC) $^ -o $@ $(COMP_FLAG) 

$(OBJ):%.o:%.c
	$(CC) $^ -o $@ -c -I ../include 

clean:
	@rm $(OBJ) image -rf 

.PHONY:all clean

#@符号的意思代表这个命令的执行语句不要打印出来

而我的文件目录是这样的:
gcc 编译偷懒利器----makefile,亲测实用代码模板_第1张图片

  • 模板搬运需要改变的地方
  1. 每个人的开发目录都不一样,而只要把下面这个路径改一下就能通用
    SRC = $(wildcard ./src/*.c ./lib/*.c) #寻找所有.c文件
    比如你的.c文件放在一个hello文件中,那么只需改成下面这样就行了
    SRC = $(wildcard ./hello/*.c)
    注意:hello和makefile是同层目录!
  2. 在开发板上运行时,需要把第一行的代码的#号去掉
    TOOLCHAIN = arm-linux-gcc
  3. 而你的项目没有依赖库的话,需要把
    CFLAGS = -I./include -L./lib -lmm -lgcc -lc
    改成下面这样
    CFLAGS = -I./include
    我的include文件夹放的是头文件lib.h,项目依赖于这个头文件,所以我放进去了,如果大家没有依赖的头文件或者库需要把所有的CFLAGS删掉。

需要注意的地方就这几个,改动好后我们就能一键make编译了,是不是瞬间轻松了许多。

  • 下面是我make编译过程:

gcc 编译偷懒利器----makefile,亲测实用代码模板_第2张图片

  • make 后的目录:

gcc 编译偷懒利器----makefile,亲测实用代码模板_第3张图片到此讲解就结束了,个人觉得纯小白理解还是有些难的,建议先去看下makefile 的知识再来看会简单很多,我是花了差不多一天的时间看了makefile 的语法,然后查看了别人的案例,结合书本知识,最后写了这个相对通用的版本,以后就是直接拿过去改变一下就能用了,不用再写了。

你可能感兴趣的:(gcc编译偷懒利器,makefile模板,makefile,cmake)