通过学习已经学会了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. 用ActivatedRoute获取url中的参数

    突然让我用ActivatedRoute import {Injectable} from "@angular/core"; import {ActivatedRoute} from ...

  2. html 模版

    使用后台开发语言的都很了解语言的动态性给开发带来的好处,PHP,aspx,jsp页面都可以直接使用相应的语法和变量,输出的事就交给解释器或编译器了,用起来方便快捷,但需要额外的解释工作: 例如php模 ...

  3. ios - UINavigationBar添加背景图片的几种简单思路

    UITabBarController下面常常需要为多个ViewController设置导航栏样式,总结了一下遇到过的为UINavigationBar添加背景图片的几种简单思路 以设置背景图片为例: 第 ...

  4. C字符串复制

    void mystrcpy(char *from, char *to) { for(; *from != '\0'; from++, to++) { *to = *from; } *to = '\0' ...

  5. 现代 PHP 新特性系列

    生成器的创建和使用 http://laravelacademy.org/post/4317.html

  6. lumen-Permission 权限管理使用心得

    安装 composer require spatie/laravel-permission github上有详细介绍:https://github.com/spatie/laravel-permiss ...

  7. std::condition_variable(2)复习

    #include <iostream> // std::cout #include <thread> // std::thread, std::this_thread::yie ...

  8. Stolz–Cesàro theorem

    w http://planetmath.org/sites/default/files/texpdf/33795.pdf Stolz–Cesàro theorem - Wikipedia  https ...

  9. python系列十二:python3模块

    #!/usr/bin/python # This Python file uses the following encoding: gbk #Python3 模块 '''用 python 解释器来编程 ...

  10. Git中如何将代码恢复到之前某个节点

    本文主要讲如何使用小乌龟软件将代码恢复到之前某个节点. 一 说明 在实际项目开发中,都是很多人一起联合开发,往往会遇到这种情况:马上要发版本了,突然发现一个致命BUG,而这个BUG是由于某个小伙伴修改 ...