[编译] 1、第一个makefile简单例子

前言

本篇用一个最简单的例子引入makefile,教你编写第一个makefile

正文

在Download/aa文件夹下有a.c和makefile文件

1 [email protected]:~/Downloads/aa$ ls
2 a.c  makefile

其中a.c为:

 1 #include<stdio.h>
 2 int main()
 3 {
 4   int i,j;
 5   for(i=0;i<10;i++)
 6   {
 7         for(j=2*i+1;j>0;j--)
 8         {
 9                 printf("#");
10         }
11         printf("\n");
12   }
13 }

其中makefile为:

其格式为:

 1 a:a.o                   #linK
 2         gcc a.o -o  a
 3 a.o:a.s                 #汇编Assembling
 4         gcc -c a.c -o a.o
 5 a.s:a.i                 #编译
 6         gcc -S a.i -o a.s
 7 a.i:a.c                 #pre-processing
 8         gcc -E a.c -o a.i
 9
10
11 run:
12         ./a
13 clear:
14         rm -rf a.o a.s a.i a

makefile文件的基本单元是规则。一条规则指定一个或多个目标文件,目标文件后面跟的是编译生成该目标文件所依赖的文件或模块,最后是生成或更新目标文件所用的命令。格式如下:

其中[]中的内容是可选的。

上面第1、2行构成一个规则~

特别注意生成目标文件所用命令必须以Tab键开头(如果某一行以tab键开头,make就认为是命令)

在依赖文件列表后面加一个;号可以跟命令,如下:

11、12行是什么鬼?

是伪目标!

在makefile文件中,目标文件可以分为两类:实目标和伪目标。实目标文件是真正要生成的、以文件的形式存放在硬盘上的目标。伪目标不要求生成实际文件,而是为了让make执行一些辅助命令,如打印一些信息、删除无用中间文件等,这里的run是运行生成a程序,clear是清除所有生成文件~

效果如下:

时间: 2024-10-27 05:27:23

[编译] 1、第一个makefile简单例子的相关文章

lambda函数也叫匿名函数,即,函数没有具体的名称。先来看一个最简单例子:

Python的lambda匿名函数 def f(x):    return x**2 print f(4) Python中使用lambda的话,写成这样 g = lambda x : x**2print g(4) lambda表达式在很多编程语言都有对应的实现.比如C#: var g = x => x**2Console.WriteLine(g(4)) 那么,lambda表达式有什么用处呢?很多人提出了质疑,lambda和普通的函数相比,就是省去了函数名称而已,同时这样的匿名函数,又不能共享在别

Makefile 简单例子1

测试环境 [email protected]:/home/ubuntu16/code2# ll 总用量 32 drwxr-xr-x 2 root root 4096 9月 5 23:44 ./ drwxr-xr-x 7 ubuntu16 ubuntu16 4096 9月 5 23:44 ../ -rw-r--r-- 1 root root 68 9月 5 04:41 add.c -rw-r--r-- 1 root root 70 9月 5 04:51 add.h -rw-r--r-- 1 roo

JFrame、JPanel 、Layout开发的简单例子

写了Java这么久,居然发现想手写一个带网格袋布局的JFrame,还不记得怎么写,写了这么多代码真不敢说记得所有细节. 幸好,只要记清楚概念就能快速开发.首先,明确一下3种容器类的差别和用途: No. 区别 1 Panel JPanel用于放置其他控件,也包含其他panels. 2 Frame JFrame 是包含 title and a border的第一层级的容器,其中通过布局设置JPanel或其他控件的位置. 3 Window JWindow是不包含 title and a border的

从一个简单例子来理解js引用类型指针的工作方式

? 1 2 3 4 5 6 7 <script> var a = {n:1};  var b = a;   a.x = a = {n:2};  console.log(a.x);// --> undefined  console.log(b.x);// --> [object Object]  </script> 上面的例子看似简单,但结果并不好了解,很容易把人们给想绕了--"a.x不是指向对象a了么?为啥log(a.x)是undefined?".&

一个最简单的Socket通信例子

所谓socket通常也称作"套接字",用于描述IP地址和端口,是一个通信链的句柄.应用程序通常通过"套接字"向网络发出请求或者应答网络请求.  Socket和ServerSocket类库位于java.net包中.ServerSocket用于服务器端,Socket是建立网络连接时使用的.在连接成功时,应用程序两端都会产生一个Socket实例,操作这个实例,完成所需的会话.对于一个网络连接来说,套接字是平等的,并没有差别,不因为在服务器端或在客户端而产生不同级别.不管是

用R语言实现一个求导的简单例子

在学习导数的时候,老师都会这样解释,假设y=f(x),对点(x0,y0)的求导过程如下:设dx是一个很小的数=> y0+dy=f(x0+dx)=> dy=f(x0+dx)-y0则在这一点的导数a=dy/dx这样假设的前提是dx很小,所以x0至(x0+dx)很短,可以近似为一条直线,则dy/dx可以看成是点(x0,y0)和点(x0+dx,y0+dy)连成直线的斜率因此关于某个点的导数,其意义也可以解释成在该点的变化率 下面用R语言实现一个简单例子:假设:y=1/x,求点(1,1)的导数 x<

C语言多线程的一个简单例子

多线程的一个简单例子: #include <stdio.h> #include <stdlib.h> #include <string.h> #include <unistd.h> #include <pthread.h> void * print_a(void *); void * print_b(void *); int main(){ pthread_t t0; pthread_t t1; // 创建线程A if(pthread_creat

生产者与消费者的一个简单例子

生产者 #include<fstream> #include<iostream> #include<Windows.h> using namespace std; int main(void) { ofstream out; const char ch = '*'; long long k = 0; DWORD64 time = GetTickCount64(); while (true) { if (GetTickCount64() - time > 5000)

C# Remoting的一个简单例子

.Net对于远程调用提供了两种方法:Remoting和WebService.WebService现在是如火如荼,特别是有一种比较流行的架构:Winform+WebService(Java..Net),我曾经做过的一个项目就是这样子的,分布式.跨平台.极佳的用户体验,这三者结合起来是不是很诱人?不过,这里我只说Remoting,Remoting具有以下特点:1.Tcp通道的Remoting速度非常快2.虽然是远程的,但是非常接近于本地调用对象3.可以做到保持对象的状态4.没有应用程序限制,可以是控