通过学习已经学会了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文件的更多相关文章

  1. 如何将Debug文件夹下的资源打包成一个EXE文件直接执行

    前言:前段时间写了个小程序,想分享给好友看看,可所以资源都放在Debug文件夹下,整个文件夹发给人家这也太……,为了显得稍微专业一点,想把它们打包一个EXE文件执行,因为我见到到这样的程序,直接一个E ...

  2. webform工程中aspx页面为何不能调用appcode文件夹下的类(ASP.NET特殊文件夹的用法)

    App_code 只有website类型的工程才有效. App_Code 下创建的.cs文件仅仅是“内容”不是代码.你设置那个文件为“编译”就行了. 其他特殊文件夹 1. Bin文件夹 Bin文件夹包 ...

  3. 使用C#创建winform窗体,修改debugwen文件夹下exe应用程序的默认图标

    在做一个接口程序是遇到的问题,记录一下: 在解决方案资源管理器上,右击项目名称——属性——点击图标和清单右边的的按纽——去Debug文件夹中找到自己的图标,打开.然后保存.

  4. 动手动脑---找出指定文件夹下所有包容指定字符串的txt文件

    思路:先判断是否为文件,如果是文件,则需要判断改文件名是否包含字符串"txt",包含则输出.如果是文件夹的话,先需要判断文件名是否包含".txt"(因为文件名也 ...

  5. C# 列出并删除一个文件夹下的所有MD5值相同的文件

    using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.T ...

  6. C++ 获取文件夹下的所有文件名

    获取文件夹下所有的文件名是常用的功能,今天再一次有这样的需求,所有就在网上查找了很多,并记下以供后用. 原文:http://blog.csdn.NET/cxf7394373/article/detai ...

  7. [转]C++ 获取文件夹下的所有文件名

    转自http://www.cnblogs.com/fnlingnzb-learner/p/6424563.html 头文件:#include<io.h> char * filePath = ...

  8. 将java的class文件放到一个指定文件夹下

    用javac执行java文件时,要把java文件的class文件放到指定文件夹下,注意文件夹要创建好,执行javac -d 文件夹 ***.java 如图: 在class文件夹下就出现了L的class ...

  9. 转载: C++ 获取文件夹下的所有文件名

    最近需要得到某个文件夹下所有文件名,于是就上网上查了查,得到如下的解决方案最多: 而且查到的最早的版本是这个:http://blog.csdn.net/cxf7394373/article/detai ...

随机推荐

  1. EntityFramework(EF) 单表与主从表的使用

    一.单表Reader 1 构建Reader类 public   class Reader    {       public int ReaderID { get; set; }       publ ...

  2. Laravel5.1 模型 --一对多关系

    一对多关系算是比较常用的一种关联关系了,关于一对多我们可以用 文章对应评论 来举例:一篇文章可以有多个评论,但是一个评论只属于一篇文章. 这就是一对多关系. 1 实现一对多关系 我们先来准备两个模型, ...

  3. Python类基础知识(面向对象基础)

    #首先 我们需要了解 面向过程是什么 面向对象是什么 我们为什么需要使用面向对象 面向过程:根据业务逻辑从上到下写垒代码 面向对象:根据代码对函数进行分类和封装 区别:解决问题的逻辑不同,但是都能解决 ...

  4. TLE之前,没有一个节点叫失败!!!

    我想我十八年来记忆最深刻的夜晚,大概便是在吉林大学燥热的宿舍里,穿着橘黄色的短袖,努力咽下大口大口的雪碧.那天晚上我仰躺在吉大热得几乎不能入眠的床板上,一动不动,看夏夜里打不尽的蚊子在惨白的天花板下飞 ...

  5. ST表(离线RMQ)

    离线RAQ时,预处理为O(n*lgn),查询为O(1)的算法,比较有意思的一种算法 放个模板在这可以随时看 //ST表(离线) //预处理 O(n*lgn) , 查询 O(1) #include &l ...

  6. coursera 《现代操作系统》

    什么是独占设备技术?为什么说 “SPOOLing不是独占设备的”? 百度百科没有解释,从教材中找到了:  第二章 取数指令 load To load a value from memory, you ...

  7. Martin Fowler’s Active Record design pattern.

    P of EAA: Active Record https://www.martinfowler.com/eaaCatalog/activeRecord.html Active Record An o ...

  8. junit5荟萃知识点(一):junit5的组成及安装

    1.什么是junit5? 和之前的junit版本不一样,junit5是由三个模块组成. JUnit 5 = JUnit Platform + JUnit Jupiter + JUnit Vintage ...

  9. bzoj3007 解救小云公主

    3007: 解救小云公主 Time Limit: 5 Sec  Memory Limit: 512 MB Submit: 159  Solved: 71 [id=3007" style=&q ...

  10. Linux中的流程控制语句

    if语句 if [ 条件判断式 ] then 程序elif [ 条件判断式 ] then 程序else 程序fi 注意: a.使用fi结尾 b.条件判断式和中括号之间需要有空格 [root@local ...