make makefile
Gcc的编译流程
预处理阶段: gcc –E hello.c –o hello.i
编译阶段: gcc –S hello.i –o hello.s
汇编阶段:gcc –c hello.s –o hello.o
链接阶段:gcc hello.o –o hello
执行:./hello
GCC的选项
GCC 有超过100个的编译选项可用. 主要包括编译处理选项、警告选项、出错选项、优化选项、体系结构选项。
-c,只编译,不连接成为可执行文件,编译器只是由输入的.c等源代码文件生成.o为后缀的目标文件,通常用于编译不包含主程序的子程序文件。
-o output_filename,确定输出文件的名称为output_filename,同时这个名称不能和源文件同名。如果不给出这个选项,gcc就给出预设的可执行文件a.out。
-S 编译选项告诉 GCC 在为 C 代码产生了汇编语言文件后停止编译. GCC 产生的汇编语言文件的缺省扩展名是 .s .
-g,产生符号调试工具(GNU的gdb)所必要的符号信息,要想对源代码进行调试,我们就必须加入这个选项。
-O,对程序进行优化编译、连接,产生的可执行文件的执行效率可以提高,但是,编译、连接的速度就相应地要慢一些。
-O2,比-O更好的优化编译、连接,当然整个编译、连接过程会更慢。
简单的makefile文件如下
start: hello.o //标号:依赖项
[tab键] gcc -o hello hello.o //只会执行这一句除非需要依赖关系才会执行依赖标号的
@echo "------------------ok----------------" //@的意思是输出的时候不会输出echo
hello.o:
[tab键] gcc -o hello.o -c hello.c
clean:
[tab键] rm -rf hello.o
makefile中也可以有变量一般变量都用大写如:VARNAME=some_text
引用变量$(VARNAME)
如:
AA=gcc
start: hello.o //标号:依赖项
[tab键] $(AA)-o hello hello.o //只会执行这一句除非需要依赖关系才会执行依赖标号的
@echo "------------------ok----------------" //@的意思是输出的时候不会输出echo
hello.o:
[tab键] $(AA)-o hello.o -c hello.c
clean:
[tab键] rm -rf hello.o
以后换编译器就只需要改变AA的值就可以啦。。
再次简化
AA=gcc
SRCS=hello.c
OBJS=hello.o #还可以这样写:OBJS=$(SRCS:.c=.o)
EXEC=hello
start: $(OBJS) //标号:依赖项
$(AA)-o $(EXEC) $(OBJS) //只会执行这一句除非需要依赖关系才会执行依赖标号的
@echo "------------------ok----------------" //@的意思是输出的时候不会输出echo
$(OBJS) :
$(AA)-o $(OBJS) -c $(SRCS)
clean:
rm -rf $(OBJS)
////////////////
还有如下:
.SUFFIXES: .c .o #这是一种规则表示x.c文件与x.o文件关联
SRCS=hello.c
OBJS=$(SRCS:.c=.o)
EXES=hello
CC=gcc
start: $(OBJS)
$(CC) -o $(EXES) $(OBJS)
@echo "------------------ok----------------"
.c.o: #关联项
$(CC) -o $@ -c $< # $@ 表示规则对应的目标文件 hello.o $< 表示规则关联的文件hello.c
clean:
rm -rf $(OBJS)
、、、、、、、、、、、、、、、、、、、、、、、、、、、、
/////////////////makefile同时编译多个文件
.SUFFIXES: .c .o #这是一种规则表示x.c文件与x.o文件关联
SRCS=hello.c\add.c #在这里同时编译2个文件
OBJS=$(SRCS:.c=.o)
EXES=hello
CC=gcc
start: $(OBJS)
$(CC) -o $(EXES) $(OBJS)
@echo "------------------ok----------------"
.c.o: #关联项
$(CC) -o $@ -c $< #自动根据$(OBJS)中.o的数量循环编译,直到编译完所有的.c文件
clean:
rm -rf $(OBJS)

make makefile的更多相关文章
- 说说Makefile那些事儿
说说Makefile那些事儿 |扬说|透过现象看本质 工作至今,一直对Makefile半知半解.突然某天幡然醒悟,觉得此举极为不妥,只得洗心革面从头学来,以前许多不明觉厉之处顿时茅塞顿开,想想好记性不 ...
- 编写一个通用的Makefile文件
1.1在这之前,我们需要了解程序的编译过程 a.预处理:检查语法错误,展开宏,包含头文件等 b.编译:*.c-->*.S c.汇编:*.S-->*.o d.链接:.o +库文件=*.exe ...
- 编写简单的Makefile文件
makefile中的编写内容如下: www:hello.c x.h gcc hello.c -o hello clean: rm hello www:hello.c x.h 表示生成www这个文件需 ...
- 简单编写Makefile
相信很多朋友都有过这样的经历,看着开源项目中好几页的makefile文件,不知所云.在日常学习和工作中,也有意无意的去回避makefile,能改就不写,能用ide就用ide.其实makefile并没有 ...
- [转]Linux中configure/makefile
本文教你如何使用autoconf.automake等来制作一个以源代码形式(.tar.gz)发布的软件.并可在执行configure时使用自定义参数. 一.概述和基础知识 在Linux下得到一个以源代 ...
- Linux内核配置、编译及Makefile简述
Hi,大家好!我是CrazyCatJack.最近在学习Linux内核的配置.编译及Makefile文件.今天总结一下学习成果,分享给大家^_^ 1.解压缩打补丁 首先是解压缩你获取到的Linux内核. ...
- make 查找的文件名顺序为:“GNUmakefile”、“makefile”、“Makefile”
默认的情况下,make会在工作目录(执行make的目录)下按照文件名顺序寻找makefile文件读取并执行,查找的文件名顺序为:“GNUmakefile”.“makefile”.“Makefile”. ...
- 实例:对2个Makefile的备注
实例1:Makefile编译链接简单.c函数 example.c Makefile exe: example.c gcc example.c -o exe clean: rm exe 执行效果: 实例 ...
- Linux中C程序调试、makefile
gcc基本语法格式:gcc [-选项] 源文件 [-选项] 目标文件,GCC编译C程序的过程: 预处理:gcc -E hello.c hello.i.-E指定执行到预处理结束,下面类似. 编译:gcc ...
- Linux工具入门:make工具与Makefile文件
1. make工具 利用make工具可以自动完成编译工作,这些工作包括: 如果修改了某几个源文件,则只重新编译这几个源文件 如果某个头文件被修改了,则重新编译所有包含该头文件的源文件 利用这种自动编译 ...
随机推荐
- input输入框默认文字,点击消失
<input type="text" value="请输入用户名" onfocus="if(value=='请输入用户名') {value='' ...
- linux安装svn服务器(yum方式)
1.查看yum是否安装 在终端中输入yum即可如果已经安装,会显示yum的参数 如果没有安装,会提示yum未安装或无效命令…… 2.安装svnyum -y instal ...
- RSA客户端js加密服务器C#解密(含源码)
国内私募机构九鼎控股打造APP,来就送 20元现金领取地址:http://jdb.jiudingcapital.com/phone.html内部邀请码:C8E245J (不写邀请码,没有现金送)国内私 ...
- JS正则表达式验证表单
一.解释一些符号相关的意义 1. /^$/ 这个是个通用的格式. ^ 匹配输入字符串的开始位置:$匹配输入字符串的结束位置 2. 里面输入需要实现的功能. ...
- UVA 110 Meta-Loopless Sorts(输出挺麻烦的。。。)
Meta-Loopless Sorts Background Sorting holds an important place in computer science. Analyzing and ...
- 关于EF中ApplyCurrentValues和ApplyOriginalValues区别
关于EF中ApplyCurrentValues和ApplyOriginalValues区别:两者都是编辑数据时使用. // // 摘要: // 将 System.D ...
- 为 vsftpd 启动 vsftpd:500 OOPS: bad bool value in config file for: pasv_enable
每行的值都不要有空格,否则启动时会出现错误,举个例子,假如我在listen=YES后多了个空格,那我启动时就出现.. 为 vsftpd 启动 vsftpd:500 OOPS: bad bool val ...
- 数据库Mysql性能优化
http://www.cnblogs.com/itxiongwei/p/5533995.html
- QT:QBitArray
QbitArray类提供位操作序列. include<QBitArray> 公有函数: QBitArray () QBitArray ( int size , bool valu ...
- 通过ftp模拟网盘
package com.xiaomo.ftp.down_upload; import java.io.IOException; import java.util.ArrayList; import j ...