简单的Makefile入门
来源:互联网 发布:文艺与政治的歧途知乎 编辑:程序博客网 时间:2024/05/12 09:44
最近几天在复习Makefile的相关知识,现在整理一下一些简单的入门知识。
首先,命名要么是Makefile,要么是makefile,一般命名成Makefile即可。
这里面的最简单的框架就是:
target:dependence
<Tab>commands
target:就是要获得的目标文件
dependence:获得目标文件所需要的依赖。
commands:是你要做的操作命令
下面用一个最简单的单文件单依赖来做例子:
所要编译的文件只有一个a.c,没有其他源文件,那么规则就会很简单:
a: a.o
cc -o a a.o
a.o: a.c
cc -c a.c
clean:
rm -rf a a.o
这样就可以了,执行make命令即可编译。
下面再用多个源文件的方式来说明:假设源文件有testing.c, sgp4sdp4.c, sgp8sdp8.c, sgp0.c, sgp_time.c, sgp_deep.c, sgp_conv.c, sgp_math.c这些源文件,还有两个头文件:sgp.h, sgp_int.h,所有源文件都是要包含这两个头文件的。那么编译的时候,如果不用makefile的话,将会非常麻烦,如下:
gcc -c sgp4sdp4.c -o sgp4sdp4.o
gcc -c sgp8sdp8.c -o sgp8sdp8.o
gcc -c sgp0.c -o sgp0.o
gcc -c sgp_time.c -o sgp_time.o
gcc -c sgp_deep.c -o sgp_deep.o
gcc -c sgp_conv.c -o sgp_conv.o
gcc -c sgp_math.c -o sgp_math.o
gcc -c testing.c -o testing.o
然后把目标文件链接起来生成可执行文件:
gcc -o kapatest sgp4sdp4.o sgp8sdp8.o sgp0.o sgp_time.o sgp_deep.o sgp_conv.o sgp_math.o testing.o -lm
要写这么多命令才能完成这套代码的编译,很麻烦对把?那么我们就来用Makefile吧。
首先用一个变量cc表示编译器是gcc,然后用变量objects来表示那么多的目标文件。
cc=gcc
objects = testing.o sgp0.o sgp_deep.o sgp_math.o\#注意反斜杠后面不能有多余的空格哦
sgp_conv.o sgp4sdp4.o sgp8sdp8.o sgp_time.o
kapatest:$(objects)
$(cc) -o kapatest $(objects) -lm#注意我把链接库就直接加到这里来了。
testing.o:testing.c sgp.h sgp_int.h
$(cc) -c testing.c
sgp8sdp8.o:sgp8sdp8.c sgp.h sgp_int.h
$(cc) -c sgp8sdp8.c
sgp4sdp4.o:sgp4sdp4.c sgp.h sgp_int.h
$(cc) -c sgp4sdp4.c
sgp0.o:sgp0.c sgp.h sgp_int.h
$(cc) -c sgp0.c
sgp_deep.o:sgp_deep.c sgp.h sgp_int.h
$(cc) -c sgp_deep.c
sgp_conv.o:sgp_conv.c sgp.h sgp_int.h
$(cc) -c sgp_conv.c
sgp_math.o:sgp_math.c sgp.h sgp_int.h
$(cc) -c sgp_math.c
sgp_time.o:sgp_time.c sgp.h sgp_int.h
$(cc) -c sgp_time.c
clean:
rm -rf kapatest $(objects)
看到了吧,最简单的Makefile入门就是这样了,如果你要使用别的编译器,可以把cc代表的变量换成你要用的编译器,加上所需相关链接库就可以了。
一起进步,一起加油!
- 简单的Makefile入门
- makefile入门的一个简单例子
- Makefile入门:最常用最简单的Makefile
- Makefile 简单入门
- makefile:简单入门
- Makefile简单入门
- Makefile简单轻松入门
- makefile的入门
- Makefile的入门知识
- 最简单的makefile
- 一个简单的Makefile
- 简单的makefile
- 一个简单的makefile
- 最简单的makefile
- 一个简单的Makefile
- 编写简单的makefile
- 一个简单的makefile
- 简单的MAKEFILE模板
- VC获取屏幕分辨率及大小相关(转)
- 使用Handler来增强Web服务的功能
- ios之应用数据存储三:SQLite
- PowerBuilder Source Extractorpb源代码执行器
- 通过dojoConfig 配置 Dojo <6>
- 简单的Makefile入门
- 使用dynamic_cast将子类转换为父类指针时,结果可能为NULL
- Convert Sorted List to Binary Search Tree
- Lake Counting
- 安装jdk目录下有jdk 和jre连个文件夹的解析
- 求组合数
- 交换机的工作原理
- eclipse/myeclipse中放入jquery库文件,报syntax error错误
- 工具类 SyncHttp