1-3 编程基础 makefile工程管理
GNU make
Linux程序员必须学会使用GNU make来构建和管理自己的软件工程。GNU的make能够使整个工程的编译、链接只需要一个命令就可以完成。
makefile
make在执行时,需要一个命名为Makefile的文件。Makefile文件描述了整个工程的编译、链接等规则。其中包括:工程中哪些源文件需要编译以及如何编译;需要创建哪些库文件以及如何创建这些库文件、如何最后产生我们想要的可执行文件。
Makefile(例)
hello:main.o func1.o func2.o
gcc main.o func1.o func2.o -o hello
main.o:main.c
gcc -c main.c
func1.o:func1.c
gcc -c gunc1.c
func2.o:func2.c
gcc -c func2.c
.PHONY:clean
clean:
rm -f hello main.o func1.o func2.o
Makefile
规则:用于说明如何生成一个或多个目标文件,规则格式如下:
targets:prerequisites
command
目标 依赖 命令
main.o:main.c
gcc -c main.c
**命令需要一【TAB】键开始**
目标
在Makefile中,规则的顺序是很重要的,因为,Makefile中只应该有一个最终目标,其它的目标都是被整个目标所连带出来的,所以一定要让马克知道你的最终目标是什么。一般来说,定义在Makefile中的目标可能会有很多,但是第一条规则中的目标将被确立为最终的目标。
文件名
make命令默认在当前目录下寻找名字为makefile或者Makefile的工程文件,当名字不为这两者之一时,可以使用如下方法指定:
make -f 文件名
伪目标
Makefile中把那些没有任何依赖只有执行动作的目标称为“伪目标”(phony targets)。
.PHONY:clean
clean:
rm -f hello main.o func1.o func2.o
“.PHONY”将“clean”目标声明为伪目标
变量
hello:main.o func1.o func2.o
gcc main.o func1.o func2.o -o hello
思考1:如果要为hello目标添加一个依赖,如:func3.o,该如何修改?
答案1:
hello:main.o func1.o func2.o func3.o
gcc main.o func1.o func2.o func3.o -o hello
答案2:
obj=main.o func1.o func2.o func3.o
hello:$(obj)
gcc $(obj) -o hello
在makefile中,存在系统默认的自动化变量
- $^:代表所有依赖文件
- $@:代表目标
- $<:代表第一个依赖文件
例:
hello:main.o func1.o func2.o
gcc main.o func1.o func2.o -o hello
==>
hello:main.o func1.o func2.o
gcc $^ -o $@
杂项
makefile中“#”字符后的内容被视作注释。
hello.c:hello.c
@gcc hello.c -o hello
@:取消回显
1-3 编程基础 makefile工程管理的更多相关文章
- Makefile 工程管理
Makefile 工程管理 Makefile 规则 --变量 在Makefile中,用户除了可以自己定义变量外,还可以使用存在系统已经定义好的默认变量 $^:代表所有的依赖文件 $@:代表目标 $&l ...
- ARM裸机开发之交叉工具链和MakeFile工程管理
一.交叉工具链 嵌入式Linux开发采用交叉开发,简单来说就是在宿主机(PC机)上面编译出能够在其他硬件平台上面运行的程序.在这个过程中,需要用到许多的交叉工具,这些交叉工具的集合就叫做交叉工具链.下 ...
- go语言基础之工程管理和工作区介绍
1.工程管理 在实际的开发工作中,直接调用编译器进行编译和链接的场景是少而又少,因为在工程中不会简单到只有一个源代码文件,且源文件之间会有相互的依赖关系.如果这样一个文件一个文件逐步编译,那不亚于一场 ...
- Makefile工程管理器及万能模板
Linux 环境下的程序员如果不会使用GNU make来构建和管理自己的工程,应该不能算是一个合格的专业程序员,至少不能称得上是 Unix程序员.在 Linux(unix )环境下使用GNU 的m ...
- 6、GNU makefile工程管理学习的一个例子
在之前我们已经学习了一个文件的编译过程,但是做过项目的都知道,一个工程中的源文件不计其数,其按类型.功能.模块会分别放在若干个目录中,而这些文件如何编译就需要有一个编译规则,虽然现在很多大型的项目都是 ...
- linux应用程序设计--Makefile工程管理
Makefile文件描述了整个工程的编译.链接等规则.包括:工程中哪些源文件需要编译以及如何编译:需要创建哪些库文件以及如何创建这些库文件.如何产生最终的可执行文件. Makefile相关术语 1.规 ...
- 1.3 Makefile 工程管理
1. 为什么得用Makefile 单步命令生成led.bin [root@cfm880 lesson1]# cd .. [root@cfm880 Part1]# mkdir lesson3 [root ...
- makefile工程管理
个人理解吧,makefile就是写一个指定格式的文件,将一系列的编译.链接.转换等操作打包在一起,方便以后一键生成可执行的二进制文件而产生的.下面记录一下这种文件的写法,方便以后忘了来查询. make ...
- [国嵌笔记][017][Makefile工程管理]
Makefile的用途 1.make能够使整个程序的编译.链接只需一个命令就可以完成 2.make的工作主要依赖于Makefile的文件.Makefile文件描述了整个程序的编译.链接等规则,使之自动 ...
随机推荐
- HDFS之二:HDFS文件系统JavaAPI接口
HDFS是存取数据的分布式文件系统,HDFS文件操作常有两种方式,一种是命令行方式,即Hadoop提供了一套与Linux文件命令类似的命令行工具.HDFS操作之一:hdfs命令行操作 另一种是Java ...
- ASP.NET Core:WebAppCoreReact
ylbtech-ASP.NET Core:WebAppCoreReact 1.返回顶部 1. 2. 3. 4. 5. 6. 7. 2. wwwroot 返回顶部 3. Clie ...
- bzoj1222
奇怪的dp 思路清奇 dp[i][j]表示当前做完了i个任务,1机器花了j秒,2机器花费的最少时间,然后转移就行了. #include<bits/stdc++.h> using names ...
- 6-13 Hog特征1
Hog特征与Haar特征有点不同,Hog特征是直接经过模板计算得到的
- hadoop2 Ubuntu 下安装部署
搭建Hadoop环境( 我以hadoop 2.7.3 为例, 系统为 64bit Ubuntu14.04 ) hadoop 2.7.3 官网下载 , 选择自己要安装的版本.注意每个版本对应两个下载选项 ...
- logging日志类
#! /usr/bin/env python #coding=utf-8 import logging,os class Logger: def __init__(self, path,clevel ...
- UVaLive 6585 && Gym 100299F Draughts (暴力+回溯)
题意:给定一个 10*10的矩阵,每一个W可以跳过一个B向对角走到#并把B吃掉,并且可以一直跳直到不能动为止,现在是W走的时候,问你最多吃几个B. 析:直接暴力+回溯,深搜就好. 代码如下: #pra ...
- 斯坦福CS231n—深度学习与计算机视觉----学习笔记 课时7
课时7 线性分类器损失函数与最优化(下) 我们为什么要最大化对数概率而非直接最大化概率? 你在做逻辑斯蒂回归时,如果你只是想要最大化概率,那你使用log是无意义的.因为log函数是单调函数,最大化概率 ...
- E20180404-ts
aero adj. 航空的,飞行的,飞机的; wheel n. 轮子; 旋转; Wheels 汽车; 有…轮子的汽车(或自行车等); vi. 转动,旋转; 突然转变方向; foil n. 箔,金 ...
- bzoj 2959: 长跑【LCT+并查集】
如果没有环的话直接LCT 考虑有环怎么办,如果是静态的话就tarjan了,但是这里要动态的缩环 具体是link操作的时候看一下是否成环(两点已联通),成环的话就用并查集把这条链缩到一个点,把权值加给祖 ...