简单的Makefile万能模板

很少用到makefile,给我的感觉总是晦涩难懂,所以记录一下Makefile的学习过程,日后再慢慢补充

语法规则

目标文件:依赖文件
命令1
命令2

简单模板举例

main: main.o a.o b.o
	gcc -o main main.o a.o b.o
main.o:main.c
	gcc -c main.c
a.o:a.c
	gcc -c a.c
b.o:b.c
	gcc -c b.c
.PHONY:clean
clean:
	rm *.o
	rm main

注意:
1.每一行的只能用TAB键缩进,不能用空格键开头,否则会make出错。
2.第一个目标文件会作为最终的目标文件。
3.gcc命令使需加上-c ,用来保证得到的.o文件可重链接。简单来说,最后生成的可执行文件就是链接.o文件得到的,即使没有gcc -o main main.o a.o b.o这行命令,也会生成main文件。
4. .PHONY的作用是声明clean为伪目标。即无论是否有clean文件,都要执行后面的rm命令。
如果没加.PHONY,当文件夹中没有clean文件的时候,输入make clean能够正常执行,但是当文件夹中有clean文件时,再输入make clean时,由于这个规则没有任何依赖文件,所以目标被认为是最新的,所以不会去执行rm命令。

make执行顺序:
1、make在当前目录下找到Makefile或makefile文件。
2、如果找到,它会找文件中的第一个目标文件,在上面的例子中,他会找到“main”这个文件,并把这个文件作为最终的目标文件。
3、如果main文件不存在,或是main所依赖的后面的 .o 文件的文件修改时间要比main这个文件新,那么,它就会执行后面所定义的命令来生成main这个文件。
4、如果main所依赖的.o文件也不存在,那么make会在当前文件中找目标为.o文件的依赖性,如果找到则再根据那一个规则生成.o文件。

规范化写法:
在开发较大工程时,会有很多文件,按照上面例子的写法太繁琐了,所以使用符号和变量会使Makefile更简洁
$^ 代表所有的依赖文件
$@ 代表所有的目标文件
$< 代表第一个依赖文件
$(变量名) 表示使用该变量

简单万能模板:


OBJS = main.o\    # "\"是转义字符,“#"是注释字符
		a.o\
		b.o\
main: $(OBJS)
	gcc -o main $^   #这里这一行省略的话就生成不了main文件,但是上面例子可以,目前还不知道原因
%.o:%.c
	gcc -c $^ -o $@
.PHONY:clean
clean:
	rm $(OBJS)
	rm main #这里有个疑问,当前面要删除的文件不存在时,后面的删除命令也不会继续执行
	
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
根据提供的引用内容,这是一个适用于小项目的简单Makefile模板。它使用gcc编译器,并且可以自动找到所有的.c和.cpp文件来生成目标文件。你可以根据需要修改目标文件的名称。此外,还提供了一些编译和链接参数,如编译参数、库参数等。你可以根据需要进行修改。此外,还提供了一些常用的目标,如编译所有文件、清理目标文件等。这个模板可以作为一个基础,根据具体项目的需求进行修改和扩展。\[1\]\[2\]\[3\] #### 引用[.reference_title] - *1* [万能 Makefile 模板](https://blog.csdn.net/luckydarcy/article/details/76796107)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [Makefile常用万能模板(包括静态链接库、动态链接库、可执行文件)](https://blog.csdn.net/prochsh/article/details/52574405)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] - *3* [浅谈MakefileMakefile万能模板](https://blog.csdn.net/qq_43533553/article/details/119577732)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值