MAKE
工程概念 不同的C文件在不同的目录实现不同的功能
tree 可以树的方式查看当前目录的所有文件
make 批处理
工程管理器 实现 自动编译 在脚本文件时有提到过批处理
工程概念 不同的C文件在不同的目录实现不同的功能
tree 可以树的方式查看当前目录的所有文件
make 批处理
工程管理器 实现 自动编译 在脚本文件时有提到过批处理
makefile 文件 帮助make编译项目源代码 如何编译的逻辑
makefile 的三元素
目标:依赖
命令
目标:依赖
命令
比如 文件夹下已有 hello.c 此文件
makefile 文件内容
hello:hell.o
gcc hello.o -o hello
hello.o:hello.c
gcc -c hello.c
.PHONY:clean //生成伪目标
clean:
rm -f hello.o hello
makefile 文件内容
hello:hell.o
gcc hello.o -o hello
hello.o:hello.c
gcc -c hello.c
.PHONY:clean //生成伪目标
clean:
rm -f hello.o hello
真目标会生成文件
伪目标只执行命令
make 命令 编译整个工程
伪目标只执行命令
make 命令 编译整个工程
make clean 会执行 rm -f hello.o hello 这条语句
make 目标题名 会把目标题名所在的那一行当作第一行执行
如果一个目录里有多个makefile文件
make -f makefile1 可指定某一个makefile文件
命令语句也变为 make -f makefile1 clean 形式
make -f makefile1 可指定某一个makefile文件
命令语句也变为 make -f makefile1 clean 形式
以功能目录存放源代码 .c文件
可以提高代码的可维护性
提高代码的可读性
提高代码的可读性
一个项目包括3种makefile文件
总控 makefile
功能目录 makefile
头文件 makefile [scripts]目录下
一般项目的结构: 拿计算器举例
1 功能函数目录 : add sub mul div main 文件夹,每个文件夹下有一个Makefile文件和src文件夹,src文件夹存放.c文件
2 scripts目录 scripts文件夹下存放头文件Makefile文件
3 include lib tools doc 这些都是存放相关文档的目录
4 总控Makefile
这些目录的作用: 方便代码的维护管理。
总控Makefile的作用 : 1 进入每个功能目录执行make命令
2 把每个功能目录里的.o文件链接生成可执行文件
这些目录的作用: 方便代码的维护管理。
总控Makefile的作用 : 1 进入每个功能目录执行make命令
2 把每个功能目录里的.o文件链接生成可执行文件
scripts文件夹下的Makefile文件作用 : 定义所有makefile中的变量。类似于C语言的头文件
功能目录的Makefile的作用 : 把当前目录中的src目录下的.c文件编译成.o文件。
在Makefile文件中注释用 # 符号
为什么全都编译成 .o文件后再链接,而不直接生成可执行文件??。这样做的目的是省时
因为编译成.o文件后,即使在对相应的.c文件做改动后,用Makefile重新编译只对改动过后的.c文件(检查文件的时间戳)重新编译成.o文件,其它.c文件不重新编译成.o文件。重新链接即可生成可执行文件。如果直接生成可执行文件,那么如果对某一个.c文件做改动,再生成可执行文件,就要把全部的.c文件重新编译一遍,相比下,先生成.o文件比较省时。
如果直接生成
因为编译成.o文件后,即使在对相应的.c文件做改动后,用Makefile重新编译只对改动过后的.c文件(检查文件的时间戳)重新编译成.o文件,其它.c文件不重新编译成.o文件。重新链接即可生成可执行文件。如果直接生成可执行文件,那么如果对某一个.c文件做改动,再生成可执行文件,就要把全部的.c文件重新编译一遍,相比下,先生成.o文件比较省时。
如果直接生成