Makefile学习

Makefile简述

makefile是一个工程文件的编译规则,描述了整个编译的逻辑和规则,包括编译,链接等等

内容:
1.哪些文件是需要编译的
2.需要包含哪些文件
3.如何生成最终的文件

一般讲上述的功能可以用gcc的编译命令一条条敲出来,但是这样会很麻烦,会花费大量的时间在复制粘贴gcc的编译代码上,而makefile文件+make命令能够很好的一步到位,你只要修改makefile里的代码信息就好

Makefile文件名

makefile文件名一般默认会通过识别GUNmakefile,Makefile,makefile等默认文件名,如果你在VScode里建立一个makefile文件
touch makefile
你会很明显发现makefile会被VS自动识别到

当然你可以直接使用make的命令来手动使用它,这时候其它命名方式也可以成功使用makefile,不过建议命名的时候带上mk后缀,方便编译器识别,也方便自己看

PS D:\WORKSPACEBLAKE\Blake\DIFF_FOUND> ren makefile_for_diff_found .\makefile_for_diff_found.mk
PS D:\WORKSPACEBLAKE\Blake\DIFF_FOUND> make -f .\makefile_for_diff_found.mk

Makefile规则与语法

target ...: prerequisites ...
    command
	  ...

target:(你要生成的目标文件)
可以是一个object,file(目标文件),也可以是一个执行文件,还可以是一个标签(label)。可使用通配符,当有多个目标时,目标之间用空格分隔。

prerequisites: (从哪些个文件生成目标文件)
生成该target所需要的依赖项,当有多个依赖项时,依赖项之间用空格分隔。

command: 该target要执行的命令(任意的shell命令)。
– 在执行command之前,默认会先打印出该命令,然后再输出命令的结果;如果不想打印出命令,可在各个command前加上@。
–command可以为多条,可以分行写,但每行都要以tab键开始。另外,如果后一条命令依赖前一条命令,则这两条命令需要写在同一行,并用分号进行分隔。
– 如果要忽略命令的出错,需要在各个command之前加上减号-

总的来说,告诉编译器你要从那个文件生成哪个文件,要执行什么命令

附上自己写的makefile文件代码:

MAKE_EXE = .\debug\main.exe


OBJ_2_MAKE_MAIN_0 = .\gcc\main\main.o
OBJ_2_MAKE_MAIN_1 = .\gcc\main\gvar.o
OBJ_2_MAKE_MAIN = $(OBJ_2_MAKE_MAIN_0) $(OBJ_2_MAKE_MAIN_1)


OBJ_2_MAKE_FUNC_0 = .\gcc\func\func_vesadata.o
OBJ_2_MAKE_FUNC_1 = .\gcc\func\func_debug.o
OBJ_2_MAKE_FUNC = $(OBJ_2_MAKE_FUNC_0) $(OBJ_2_MAKE_FUNC_1)


SOURCE_FILE_MAIN_0 = .\main\main.c
SOURCE_FILE_MAIN_1 = .\main\gvar.c

SOURCE_FILE_MAIN = $(SOURCE_FILE_MAIN_0) $(SOURCE_FILE_MAIN_1)

SOURCE_FILE_FUNC_0 = .\func\func_vesadata.c
SOURCE_FILE_FUNC_1 = .\func\func_debug.c

SOURCE_FILE_FUNC = $(SOURCE_FILE_FUNC_0) $(SOURCE_FILE_FUNC_1)


INCLUDE_FILE = .\inc\

LOCAL_FLAGS = -Wall 

#FUNC_LIB_0 = 


$(MAKE_EXE):$(SOURCE_FILE_MAIN) $(SOURCE_FILE_FUNC) $(INCLUDE_FILE)
	gcc -c $(SOURCE_FILE_MAIN_0) -I $(INCLUDE_FILE) $(LOCAL_FLAGS) -o $(OBJ_2_MAKE_MAIN_0)
	gcc -c $(SOURCE_FILE_MAIN_1) -I $(INCLUDE_FILE) $(LOCAL_FLAGS) -o $(OBJ_2_MAKE_MAIN_1)
	gcc -c $(SOURCE_FILE_FUNC_0) $(LOCAL_FLAGS) -o $(OBJ_2_MAKE_FUNC_0)
	gcc -c $(SOURCE_FILE_FUNC_1) $(LOCAL_FLAGS) -o $(OBJ_2_MAKE_FUNC_1)
	gcc $(OBJ_2_MAKE_FUNC) $(OBJ_2_MAKE_MAIN) -o $(MAKE_EXE)


.PONEY:clean_gcc
clean_gcc:
	rm -rf ./gcc/*

.PONEY:clean_debug
clean_debug:
	rm -rf ./debug/*
  • 7
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值