没有合适的资源?快使用搜索试试~ 我知道了~
资源推荐
资源详情
资源评论
使用make命令编译项目文件入门
目录:
一、make命令的运行过程
二、基本gcc编译命令
三、简单Makefile文件的编写
四、实例
一、make命令的运行过程
在shell的提示符号下,若输入"make",则它会到目前的目录下找寻Makefile这个文件.然后依照Makefile中所记录的步骤一步一步的来执行.在我们写程序的时候,如果事先就把compiler程式所需要的步骤先写在Makefile中的话,想要compiler程序的时候就只要打入make的指令.只要程序无误的话,就可以获得所需要的结果了!
在项目文件中,如果有成百上千个源程序,每次修改其中的一个都需要全部重新编译是不可想象的事情.但通过编辑Makefile文件,利用make命令就可以只针对其中修改的源文件进行编译,而不需要全体编译.这就是make命令在编译项目文件时体现出来的优势.能做到这点,主要是基于Makefile文件的编写,和make命令对Makefile文件的调用.Makefile文件作为make命令的默认参数,使一个基于依赖关系编写的结构文件.
大家经常看到使用make all, make install, make clean等命令,而他们处理的目标都是一个Makefile文件,那么all、install、clean参数是如何调用Makefile文件的运行呢?在这里,如果向上面的命令如果能够正确运行的话,那么在Makefile文件里一定有这样的几行,他们的以all、install、clean开始
all: ×××××××
×××××××××××
install: ××××××
×××××××××××
clean: ×××××××××
×××××××××××
all,install,clean我们可以用其他的变量来代替,他们是编译时的一个参数,在Makefile文件中作为一个标志存在,也就是我们所说的目标.make all命令,就告诉make我们将执行all所指定的目标.为了便于理解Make程序的流程,我们给大家看一个与gcc毫无关系的Makefile文件:
#Makefile begin
all:
@echo you have typed command "make all"
clean:
@echo you have typed command "make clean"
install:
@ehco you have typed command "make $@"
#Makefile end
注意在这里,all:、clean:、install:行要顶格些,而所有的@echo前要加tab键来跳格缩进.下面是运行结果
[root@xxx test]#make all
you have typed command "make all"
[root@xxx test]#make clean
目录:
一、make命令的运行过程
二、基本gcc编译命令
三、简单Makefile文件的编写
四、实例
一、make命令的运行过程
在shell的提示符号下,若输入"make",则它会到目前的目录下找寻Makefile这个文件.然后依照Makefile中所记录的步骤一步一步的来执行.在我们写程序的时候,如果事先就把compiler程式所需要的步骤先写在Makefile中的话,想要compiler程序的时候就只要打入make的指令.只要程序无误的话,就可以获得所需要的结果了!
在项目文件中,如果有成百上千个源程序,每次修改其中的一个都需要全部重新编译是不可想象的事情.但通过编辑Makefile文件,利用make命令就可以只针对其中修改的源文件进行编译,而不需要全体编译.这就是make命令在编译项目文件时体现出来的优势.能做到这点,主要是基于Makefile文件的编写,和make命令对Makefile文件的调用.Makefile文件作为make命令的默认参数,使一个基于依赖关系编写的结构文件.
大家经常看到使用make all, make install, make clean等命令,而他们处理的目标都是一个Makefile文件,那么all、install、clean参数是如何调用Makefile文件的运行呢?在这里,如果向上面的命令如果能够正确运行的话,那么在Makefile文件里一定有这样的几行,他们的以all、install、clean开始
all: ×××××××
×××××××××××
install: ××××××
×××××××××××
clean: ×××××××××
×××××××××××
all,install,clean我们可以用其他的变量来代替,他们是编译时的一个参数,在Makefile文件中作为一个标志存在,也就是我们所说的目标.make all命令,就告诉make我们将执行all所指定的目标.为了便于理解Make程序的流程,我们给大家看一个与gcc毫无关系的Makefile文件:
#Makefile begin
all:
@echo you have typed command "make all"
clean:
@echo you have typed command "make clean"
install:
@ehco you have typed command "make $@"
#Makefile end
注意在这里,all:、clean:、install:行要顶格些,而所有的@echo前要加tab键来跳格缩进.下面是运行结果
[root@xxx test]#make all
you have typed command "make all"
[root@xxx test]#make clean
you have typed command "make clean"
[root@xxx test]#make install
you have typed command "make install"
二、基本gcc编译命令
1、源程序的编译
在Linux下面,使用GNU的gcc编译器编译一个C语言的源程序.下面我们简单介绍几个常用的Gcc编译命令和参数,这里不是讲解Gcc的使用,只是介绍简单的基础知识是我们能看懂一般的makefile文件.
我们先看一个使用gcc编译器的实例.假设我们有下面一个非常简单的源程序(hello.c):
int main(int argc,char **argv)
{
printf("Hello Linux\n");
}
要编译这个程序,我们只要在命令行下执行: gcc -o hello hello.c
gcc 编译器就会为我们生成一个hello的可执行文件.执行./hello就可以看到程序的输出结果了.命令行中 gcc表示我们是用gcc来编译我们的源程序,-o 选项表示我们要求编译器给我们输出的可执行文件名为hello 而hello.c是我们的源程序文件.
gcc的基本格式就是:
gcc [-option] objectname sourcename
其中-option是参数,用来控制gcc的编译方式,常见的参数有如下几个:
-o 表示我们要求输出的可执行文件名:-o binaryname
-c 表示我们只要求编译器进行编译,输出目标代码,而不进行连接: -c objectivename.o
-g 表示我们要求编译器在编译的时候提供我们以后对程序进行调试的信息: -g
-O2 表示我们希望编译器在编译的时候对我们的程序进行一定程度的优化.2表示我们优化的级别是2.范
围是1-3.不过习惯上我们都使用2的优化级别.
-Wall是警告选项,表示我们希望gcc在编译的时候,让gcc输出她认为的一些程序中可能会出问题的一些警
告信息,比如指针没有初始化就进行赋值等等一些警告信息.
-l 与之紧紧相连的是表示连接时所要的链接库,比如多线程,如果你使用了pthread_create函数,那么 你就应该在编译语句的最后加上"-lpthread","-l"表示连接,"pthread"表示要连接的库,注意他们 在这里要连在一起写.如:gcc -o test test1.o test2.o -lpthread
-I 表示将系统缺省的头文件路径扩展到当前路径,默认的路径保存在/etc/ld.conf文件中。
gcc的例子:
gcc -c test.c,表示只编译test.c文件,成功时输出目标文件test.o
gcc -o test test.o,将test.o连接成可执行的二进制文件test
[root@xxx test]#make install
you have typed command "make install"
二、基本gcc编译命令
1、源程序的编译
在Linux下面,使用GNU的gcc编译器编译一个C语言的源程序.下面我们简单介绍几个常用的Gcc编译命令和参数,这里不是讲解Gcc的使用,只是介绍简单的基础知识是我们能看懂一般的makefile文件.
我们先看一个使用gcc编译器的实例.假设我们有下面一个非常简单的源程序(hello.c):
int main(int argc,char **argv)
{
printf("Hello Linux\n");
}
要编译这个程序,我们只要在命令行下执行: gcc -o hello hello.c
gcc 编译器就会为我们生成一个hello的可执行文件.执行./hello就可以看到程序的输出结果了.命令行中 gcc表示我们是用gcc来编译我们的源程序,-o 选项表示我们要求编译器给我们输出的可执行文件名为hello 而hello.c是我们的源程序文件.
gcc的基本格式就是:
gcc [-option] objectname sourcename
其中-option是参数,用来控制gcc的编译方式,常见的参数有如下几个:
-o 表示我们要求输出的可执行文件名:-o binaryname
-c 表示我们只要求编译器进行编译,输出目标代码,而不进行连接: -c objectivename.o
-g 表示我们要求编译器在编译的时候提供我们以后对程序进行调试的信息: -g
-O2 表示我们希望编译器在编译的时候对我们的程序进行一定程度的优化.2表示我们优化的级别是2.范
围是1-3.不过习惯上我们都使用2的优化级别.
-Wall是警告选项,表示我们希望gcc在编译的时候,让gcc输出她认为的一些程序中可能会出问题的一些警
告信息,比如指针没有初始化就进行赋值等等一些警告信息.
-l 与之紧紧相连的是表示连接时所要的链接库,比如多线程,如果你使用了pthread_create函数,那么 你就应该在编译语句的最后加上"-lpthread","-l"表示连接,"pthread"表示要连接的库,注意他们 在这里要连在一起写.如:gcc -o test test1.o test2.o -lpthread
-I 表示将系统缺省的头文件路径扩展到当前路径,默认的路径保存在/etc/ld.conf文件中。
gcc的例子:
gcc -c test.c,表示只编译test.c文件,成功时输出目标文件test.o
gcc -o test test.o,将test.o连接成可执行的二进制文件test
剩余10页未读,继续阅读
资源评论
helloearth007
- 粉丝: 0
- 资源: 5
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- 直接插入排序,冒泡排序,直接选择排序.zip
- 在排序2的基础上,再次对快排进行优化,其次增加快排非递归,归并排序,归并排序非递归版.zip
- 实现了7种排序算法.三种复杂度排序.三种nlogn复杂度排序(堆排序,归并排序,快速排序)一种线性复杂度的排序.zip
- 冒泡排序 直接选择排序 直接插入排序 随机快速排序 归并排序 堆排序.zip
- 课设-内部排序算法比较 包括冒泡排序、直接插入排序、简单选择排序、快速排序、希尔排序、归并排序和堆排序.zip
- Python排序算法.zip
- C语言实现直接插入排序、希尔排序、选择排序、冒泡排序、堆排序、快速排序、归并排序、计数排序,并带图详解.zip
- 常用工具集参考用于图像等数据处理
- 音乐展示网页、基于Stenography的图像数字水印添加与提取,以及基于颜色矩和Tamura算法的图像相似度评估算法py源码
- 基于EmguCV(OpenCV .net封装),图像数字水印加解密算法的实现,其中包含最低有效位算法,离散傅里叶变换算法+文档书
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功