Makafile编写

阅读: 评论:0

Makafile编写

Makafile编写

源代码:
//main.c
#include <stdio.h>
#include "complicated.h"int main(){printf("%sn",HELLO_STRING);printf("%sn",PROJECT_NAME);complicated();return 0;
}
//complicated.h
#ifndef __COMPLICATED_H__
#define __COMPLICATED_H__#define HELLO_STRING "hello !"
#define PROJECT_NAME "complicated"extern void complicated(void);#endif
//complicated.c
#include <stdio.h>
#include "complicated.h"void complicated(void){printf("This is a %s project!n",PROJECT_NAME);
}
Makefile
# 描述:complicated 项目 makefile文件
# 版本:v1.5
# 修改记录:
# 1. 为complicated项目makefile添加注释
# 2. 使用变量改进我们complicated项目的makefile
# 3. 使用静态模式规则,简化makefile
# 4. 使用伪目标,加上clean规则
# 5. 引进wildcard函数,自动扫描当前目录下的源文件
# 6. 加入自动规则依赖# 定义可执行文件变量
executbale := complicated
# wildcard函数扫描源文件,定义列表变量
# wildcard:列出符合*.c格式的文件名
sources := $(wildcard *.c)
# 使用变量的引用替换,定义object文件列表
objects := $(sources:.c=.o)
# 使用变量的引用替换,定义依赖描述文件列表
deps := $(sources:.c=.d)# 定义编译命令变量
CC := gcc
RM := rm -rf# 终极目标规则,生成complicated可执行文件
$(executbale): $(objects)
#  使用自动化变量改造我们的编译命令$(CC) -o $@ $^# 子规则, main.o和complicated.o的生成规则,使用静态模式规则
$(objects):%.o:%.c$(CC) -o $@  -c $<# clean规则
#.PHONY <伪目标>
.PHONY: clean
clean:$(RM) $(executbale) $(objects) $(deps)# 自动规则依赖
sinclude $(deps)$(deps):%.d:%.c$(CC) -MM $< > $@
解析规则
终极目标:依赖A  依赖B 依赖C终极目标命令依赖A:子依赖A1 子依赖A2 依赖A命令依赖B:子依赖B1 子依赖B2 依赖B命令依赖C:子依赖C1 子依赖C2 依赖C命令

对整颗依赖树以从底到上,从左到右的顺序,解析执行每一条规则:

变量的分类与赋值
foo1 = $(bar) #递归展开式变量:变量被引用时求值 
= 和:=区别:求值时机foo2 := $(bar) #直接展开式变量:变量被定义时求值bar = $(ugh)
ugh = Huh?all:echo "foo1 is $(foo1),foo2 is $(foo2)"
特殊的变量
all:first second thirdecho "$$@ = $@"          #  $@ 代表规则中的目标文件名echo "$$< = $<"           #  $< 代表规则的第一个依赖的文件名echo "$$^ = $^"           #  $^ 代表规则中所有依赖文件的列表first second third:

本文发布于:2024-01-28 10:59:40,感谢您对本站的认可!

本文链接:https://www.4u4v.net/it/17064107836941.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:Makafile
留言与评论(共有 0 条评论)
   
验证码:

Copyright ©2019-2022 Comsenz Inc.Powered by ©

网站地图1 网站地图2 网站地图3 网站地图4 网站地图5 网站地图6 网站地图7 网站地图8 网站地图9 网站地图10 网站地图11 网站地图12 网站地图13 网站地图14 网站地图15 网站地图16 网站地图17 网站地图18 网站地图19 网站地图20 网站地图21 网站地图22/a> 网站地图23