多个源文件进行编译,即 makefile 的编写
2014-06-10 21:53
225 查看
makefile的好处是防止源文件的重复编译
比如有好多个源文件,某天对其中一个源文件进行修改,如果不写makefile的话,需要将整个工程的所有文件重新编译一遍,非常麻烦,有了makefile,说明了每个源文件的依附关系,当某个源文件改变的时候只需重新编译一下关联的源文件就好。
例如:有以下文件
one.h
one.c
two.h
two.c
main.c
main.c 中引入one.h 和two.h两个头文件,one.c two.c 分别实现两个头文件中定义的函数
有两种方式编译运行该程序,
一:手动单独编译
gcc -c one.c
gcc -c two.c
gcc -c main.c
gcc -o main main.o one.o two.o
./main
二:makefile
那么只需在任何一个文本编辑器里面写下如下命令,并保存为makefile
main:main.o one.o two.o
tab键gcc(或者cc)-o main main.o one.o two.o
main.o:main.c one.h two.h
tab键gcc(或者cc)-c main.c
one.o:one.c one.h
tab键gcc(或者cc)-c one.c
two.o:two.c two.h
tab键gcc(或者cc)-c two.c
这些源文件都需要在同一个目录下,并且在main.c中引入one.h 和two.h的时候要用"one.h" "two.h"不要用<>否则编译器会到系统类库文件中去找,是找不到的。
然后在同一目录的终端下,输入make命令,那么编译就开始了,没有什么错误的话,执行./main就可以让你的程序跑起来了。
还可以对makefile进行精简:
首先有三个符号:
1 $@ 代表目标文件
2 $< 代表第一个文件
3$^ 代表所有依赖文件
所以上面命令可以精简为:
main:main.o one.o two.o
tab键gcc(或者cc)-o $@ $^
main.o:main.c one.h two.h
tab键gcc(或者cc)-c $<
one.o:one.c one.h
tab键gcc(或者cc)-c $<
two.o:two.c two.h
tab键gcc(或者cc)-c $<
以上makefile还可以精简:
一个新的符号:.c.o
该符号自动搜索相关联的源文件和头文件
于是makefile还可以写为:
main:main.o one.o two.o
tab键gcc(或者cc)-o $@ $^
.c.o:
tab键gcc(或者cc) $<
最好在加上clean命令,将生成的目标文件和执行文件删除,遵守优雅简洁原则,呵呵,方便再次编译
clean:
ab键gcc(或者cc)rm main main.o one.o two.o
makefile的格式大家要记住了,至于问什么这样写,只能说这是标准,makefile还有很多高深的用法,以后在逐渐去学习。
比如有好多个源文件,某天对其中一个源文件进行修改,如果不写makefile的话,需要将整个工程的所有文件重新编译一遍,非常麻烦,有了makefile,说明了每个源文件的依附关系,当某个源文件改变的时候只需重新编译一下关联的源文件就好。
例如:有以下文件
one.h
one.c
two.h
two.c
main.c
main.c 中引入one.h 和two.h两个头文件,one.c two.c 分别实现两个头文件中定义的函数
有两种方式编译运行该程序,
一:手动单独编译
gcc -c one.c
gcc -c two.c
gcc -c main.c
gcc -o main main.o one.o two.o
./main
二:makefile
那么只需在任何一个文本编辑器里面写下如下命令,并保存为makefile
main:main.o one.o two.o
tab键gcc(或者cc)-o main main.o one.o two.o
main.o:main.c one.h two.h
tab键gcc(或者cc)-c main.c
one.o:one.c one.h
tab键gcc(或者cc)-c one.c
two.o:two.c two.h
tab键gcc(或者cc)-c two.c
这些源文件都需要在同一个目录下,并且在main.c中引入one.h 和two.h的时候要用"one.h" "two.h"不要用<>否则编译器会到系统类库文件中去找,是找不到的。
然后在同一目录的终端下,输入make命令,那么编译就开始了,没有什么错误的话,执行./main就可以让你的程序跑起来了。
还可以对makefile进行精简:
首先有三个符号:
1 $@ 代表目标文件
2 $< 代表第一个文件
3$^ 代表所有依赖文件
所以上面命令可以精简为:
main:main.o one.o two.o
tab键gcc(或者cc)-o $@ $^
main.o:main.c one.h two.h
tab键gcc(或者cc)-c $<
one.o:one.c one.h
tab键gcc(或者cc)-c $<
two.o:two.c two.h
tab键gcc(或者cc)-c $<
以上makefile还可以精简:
一个新的符号:.c.o
该符号自动搜索相关联的源文件和头文件
于是makefile还可以写为:
main:main.o one.o two.o
tab键gcc(或者cc)-o $@ $^
.c.o:
tab键gcc(或者cc) $<
最好在加上clean命令,将生成的目标文件和执行文件删除,遵守优雅简洁原则,呵呵,方便再次编译
clean:
ab键gcc(或者cc)rm main main.o one.o two.o
makefile的格式大家要记住了,至于问什么这样写,只能说这是标准,makefile还有很多高深的用法,以后在逐渐去学习。
相关文章推荐
- make 指定使用特定的makefile文件进行编译
- 多模块编译链接 Makefile文件的编写
- JNI 导入.a库和编译.so的makefile(.mk)文件编写
- 1.编写一个简单的C语言程序:计算输入多个整数的平均值,并将此程序分割成多个小文件。 2.为第1题中的程序编写makefile文件,用make编译后改成返回最小值,再编译,观察有多少文件不需要重新
- .c文件如何编译为ko的MAKEFILE文件编写
- 简单编写makefile文件,实现GCC4.9编译项目,增加boost库測试等等。。
- 快速编写“专家级”makefile(4.打造更专业的编译环境——支持头文件目录的指定)
- 简单编写makefile文件,实现GCC4.9编译项目,加入boost库测试等等。。
- c文件如何编译为ko的MAKEFILE文件编写
- 多个*.c文件编译生成一个模块驱动*.ko的makefile文件编写
- linux下使用CmakeLists.txt生成makefile文件进行编译
- 用keil像makefile那样选择文件进行编译
- OpenCV 多文件编译的Makefile编写
- 多个*.c文件编译生成一个模块驱动*.ko的makefile文件编写
- .c文件如何编译为ko的MAKEFILE文件编写
- MPI+CUDA 混合编译makefile文件编写
- 编写一个shell命令脚本来交叉编译.c文件,代替Makefile
- 多个*.c文件编译生成一个模块驱动*.ko的makefile文件编写
- java ant进行编译打包,build.xml文件编写
- 1.编写一个简单的C语言程序:计算输入多个整数的平均值,并将此程序分割成多个小文件。 2.为第1题中的程序编写makefile文件,用make编译后改成返回最小值,再编译,观察有多少文件不需要重新