单文件夹下的C程序如何编写Makefile文件
通过学习已经学会了GCC的一些基础的命令,以及如何将C语言源代码编译成可执行文件。
我们已经知道在linux环境下编译源码时,常会有以下三个步骤:
./configure
make
make clean
执行./configure时,会检查系统的配置等,得到相关的有用的信息,生成Makefile文件。
执行make命令时,make命令解释Makefile文件中的规则,生成目标文件。
执行make clean会删除生成目标文件过程中的生成的中间文件。
Makefile文件是可以由我们手工建立的:接下来是编写在同一个文件夹下的程序的Makefile文件。
文件有compute.c与m.h,代码如下:
//compute.c
#include<stdio.h>
#include"m.h"
int main(){
int a=,b=;
printf("a+b=%d\n",add(a,b));
printf("a*b=%d\n",multi(a,b));
return ;
}
//m.h
int add(int a,int b){
int c;
c = a+ b;
return c;
} int multi(int a, int b){
int c=a*b;
return c;
}
编写的Makefile文件如下:
#makefile
objects=compute.o
CC=@gcc #如果没有@符号,gcc的命令就会输出到终端
CPP=@gcc -c #如果有@符号,gcc的命令就不会输出到终端 compute:$(objects)
$(CC) -o compute $(objects) #标准写法
compute.o:compute.c m.h
$(CPP) compute.c #简写形式;
#make自动推导 因为要生成.o文件,就需要相关联的compute.c文件,
#make会自动生成gcc -c compute.c的命令
#compute.o:m.h clean:
@rm compute $(objects)
接下来,执行make命令,就会生成compute.o文件与可执行文件compute.
$ ls -l
总用量
-rw-r--r-- qi qi 5月 : compute.c
-rw-r--r-- qi qi 5月 : Makefile
-rw-r--r-- qi qi 5月 : m.h
$ make
$ ls -l
总用量
-rwxr-xr-x qi qi 5月 : compute
-rw-r--r-- qi qi 5月 : compute.c
-rw-r--r-- qi qi 5月 : compute.o
-rw-r--r-- qi qi 5月 : Makefile
-rw-r--r-- qi qi 5月 : m.h
执行make clean会按照Makefile文件中的伪目标clean,对文件进行删除操作。
$ make clean
$ ls -l
总用量
-rw-r--r-- qi qi 5月 : compute.c
-rw-r--r-- qi qi 5月 : Makefile
-rw-r--r-- qi qi 5月 : m.h
单文件夹下的C程序如何编写Makefile文件的更多相关文章
- 如何将Debug文件夹下的资源打包成一个EXE文件直接执行
前言:前段时间写了个小程序,想分享给好友看看,可所以资源都放在Debug文件夹下,整个文件夹发给人家这也太……,为了显得稍微专业一点,想把它们打包一个EXE文件执行,因为我见到到这样的程序,直接一个E ...
- webform工程中aspx页面为何不能调用appcode文件夹下的类(ASP.NET特殊文件夹的用法)
App_code 只有website类型的工程才有效. App_Code 下创建的.cs文件仅仅是“内容”不是代码.你设置那个文件为“编译”就行了. 其他特殊文件夹 1. Bin文件夹 Bin文件夹包 ...
- 使用C#创建winform窗体,修改debugwen文件夹下exe应用程序的默认图标
在做一个接口程序是遇到的问题,记录一下: 在解决方案资源管理器上,右击项目名称——属性——点击图标和清单右边的的按纽——去Debug文件夹中找到自己的图标,打开.然后保存.
- 动手动脑---找出指定文件夹下所有包容指定字符串的txt文件
思路:先判断是否为文件,如果是文件,则需要判断改文件名是否包含字符串"txt",包含则输出.如果是文件夹的话,先需要判断文件名是否包含".txt"(因为文件名也 ...
- C# 列出并删除一个文件夹下的所有MD5值相同的文件
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.T ...
- C++ 获取文件夹下的所有文件名
获取文件夹下所有的文件名是常用的功能,今天再一次有这样的需求,所有就在网上查找了很多,并记下以供后用. 原文:http://blog.csdn.NET/cxf7394373/article/detai ...
- [转]C++ 获取文件夹下的所有文件名
转自http://www.cnblogs.com/fnlingnzb-learner/p/6424563.html 头文件:#include<io.h> char * filePath = ...
- 将java的class文件放到一个指定文件夹下
用javac执行java文件时,要把java文件的class文件放到指定文件夹下,注意文件夹要创建好,执行javac -d 文件夹 ***.java 如图: 在class文件夹下就出现了L的class ...
- 转载: C++ 获取文件夹下的所有文件名
最近需要得到某个文件夹下所有文件名,于是就上网上查了查,得到如下的解决方案最多: 而且查到的最早的版本是这个:http://blog.csdn.net/cxf7394373/article/detai ...
随机推荐
- 转:: 刺鸟:用python来开发webgame服务端(1)
来源:http://ciniao.me/article.php?id=9 --------------- 刺鸟原创文章,转载请注明出处 在开始之前,先简单描述一下项目的特点:我要实现的是一个mm ...
- Docker学习(1安装docker)
1.在安装之前首先查看系统版本,ubuntu centos6 7 安装方式并不相同,所以首先确定系统版本 #cat /etc/issue 确定系统版本 2.开始安装Docker (1)Ubuntu下 ...
- restful demo 演示; jquery min1.1;
[说明]上午建立了一个restful风格的一个测试,运行通过:下午试了试postman,想看看http请求的具体过程,但是chrome浏览器的network面板也可以查看,并且很方便,就索性用它了 一 ...
- 【BZOJ2555】SubString 后缀自动机+LCT
[BZOJ2555]SubString Description 懒得写背景了,给你一个字符串init,要求你支持两个操作 (1):在当前字符串的后面插入一个字符串 (2 ...
- 1154 回文串划分(DP+Manacher)
1154 回文串划分 基准时间限制:1 秒 空间限制:131072 KB 分值: 40 难度:4级算法题 有一个字符串S,求S最少可以被划分为多少个回文串. 例如:abbaabaa,有多种划分方式. ...
- python系列一:python3基础语法
'''python保留字即关键字,我们不能把它们用作任何标识符名称.Python 的标准库提供了一个 keyword 模块,可以输出当前版本的所有关键字: '''>>> import ...
- 整理前端css/js/jq常见问题及解决方法(3)
jq: 1.prepend(参数);//将参数内容前置再某元素内部; eg: <div id="div1">奇妙能力歌</div> $("#div ...
- 批处理 ECHO命令输出空行
众所周知,如果echo后面跟一个环境变量,但是该变量却为空时,相当于不加任何参数的echo,即输出当前echo是on还是off.很多文章或者教程给出的解决方案都是在echo后面加一个点号echo.,这 ...
- servlet 3.0 的新特性之三对异步处理的支持
一.异步处理 1. 什么是异步处理 原来,在服务器没有结束响应之前,浏览器是看不到响应内容的!只有响应结束时,浏览器才能显示结果! 现在异步处理的作用:在服务器开始响应后,浏览器就可以看到响应内容,不 ...
- bzoj3007 解救小云公主
3007: 解救小云公主 Time Limit: 5 Sec Memory Limit: 512 MB Submit: 159 Solved: 71 [id=3007" style=&q ...