0.前言
    从学习C语言開始就慢慢開始接触makefile,查阅了非常多的makefile的资料但总感觉没有真正掌握makefile,假设自己动手写一个makefile总认为非常吃力。

所以特意借助博客总结makefile的相关知识,通过样例说明makefile的详细使用方法。

    例说makefile分为下面几个部分。很多其它内容请參考【例说makefile索引博文

1.仅仅有单个C文件

    2.含有多个C文件    
    3.须要包含头文件路径

    4.添加宏定义
    5.添加系统共享库
    6.添加自己定义共享库
    7.一个实际的样例

    【代码仓库】——makefile-example
    代码仓库位于bitbucket,可借助TortoiseHg(GUI工具)克隆代码或者在网页中直接下载zip包。

1.三个C文件
    三个文件位于同一个文件夹中。

    【test.c】
#include <stdio.h>
int main(void)
{
int a = 3;
int b = 2; printf("a=%d\n", a);
printf("b=%d\n", b); printf("a+b=%d\n", add(a,b));
printf("a-b=%d\n", sub(a,b));
return 0;
}
    【test-add.c】
int add(int a, int b)
{
return a+b;
}
    【test-sub.c】
int sub(int a, int b)
{
return a-b;
}

2.复习GCC指令
    多个C文件和单个C文件的处理过程相似,此时-c或-o之后能够添加多个C文件或目标文件。
    【编译源文件】
    gcc -c test.c test-add.c test-sub.c
    【链接目标文件】
    gcc -o test test.o test-add.o test-sub.o
    【运行目标文件】
    ./test
    【控制台输出】
    a=3
    b=2
    a+b=5
    a-b=1

3.编写makefile文件
    【makefile】
    请替换当中的[tab],并以代码仓库中的makefile文件为主。

# 指令编译器和选项
CC=gcc
CFLAGS=-Wall -std=gnu99 # 目标文件
TARGET=test
# 源文件
SRCS=test.c test-add.c test-sub.c OBJS = $(SRCS:.c=.o) $(TARGET):$(OBJS)
# @echo TARGET:$@
# @echo OBJECTS:$^
[tab]$(CC) -o $@ $^ clean:
[tab]rm -rf $(TARGET) $(OBJS) %.o:%.c
[tab]$(CC) $(CFLAGS) -o $@ -c $<

    【详细说明】
    【1】很多其它说明请參考:例说makefile——单个文件
    【2】相对于单个文件,此处仅改动了SRCS=test.c test-add.c test-sub.c,变量SRCS追加了多个C文件。相比单个文件的情况,只改动了这一行。
    【3】文件和文件之间通过空格隔开。
    【运行过程】
    make clean && make 
    【控制台输出】
rm -rf test test.o test-add.o test-sub.o
gcc -Wall -std=gnu99 -o test.o -c test.c
gcc -Wall -std=gnu99 -o test-add.o -c test-add.c
gcc -Wall -std=gnu99 -o test-sub.o -c test-sub.c
gcc -o test test.o test-add.o test-sub.o
    从控制台的输出能够看出,通过make clean清除上一次的可运行文件和目标文件,然后依次编译各个C文件,最后把3个目标文件链接为终于可运行文件。

版权声明:本文博主原创文章,博客,未经同意不得转载。

Linux学习笔记——举例说,makefile 多个文件的更多相关文章

  1. Linux学习笔记——举例说,makefile 添加宏定义

    0.前言     从学习C语言開始就慢慢開始接触makefile,查阅了非常多的makefile的资料但总感觉没有真正掌握makefile.假设自己动手写一个makefile总认为非常吃力. 所以特意 ...

  2. [转]Linux学习笔记——例说makefile 头文件查找路径

    0.前言     从学习C语言开始就慢慢开始接触makefile,查阅了很多的makefile的资料但总感觉没有真正掌握makefile,如果自己动手写一个makefile总觉得非常吃力.所以特意借助 ...

  3. Linux学习笔记——例说makefile 头文件查找路径

    0.前言     从学习C语言開始就慢慢開始接触makefile,查阅了非常多的makefile的资料但总感觉没有真正掌握makefile,假设自己动手写一个makefile总认为非常吃力.所以特意借 ...

  4. Linux学习笔记——例说makefile 综合案例

    0.前言     从学习C语言開始就慢慢開始接触makefile,查阅了非常多的makefile的资料但总感觉没有真正掌握makefile,假设自己动手写一个makefile总认为非常吃力.所以特意借 ...

  5. Linux学习笔记——例说makefile 索引博文

    0.前言     从学习C语言開始就慢慢開始接触makefile.查阅了非常多的makefile的资料但总感觉没有真正掌握makefile,假设自己动手写一个makefile总认为非常吃力.所以特意借 ...

  6. Linux学习笔记——如何使用echo指令向文件写入内容

    0.前言     本文总结如何使用echo命令向文件中写入内容,例如使用echo指令覆盖文件内容,使用echo指令向文件追加内容,使用echo指令往文件中追加制表符.     echo向文件中输出内容 ...

  7. Linux 学习笔记_12_文件共享服务_3_NFS网络文件服务

    NFS网络文件服务 NFS---- Network File System 用于UNIX/Linux[UNIX类操作系统]系统间通过网络进行文件共享,用户可以把网络中NFS服务器提供的共享目录挂载到本 ...

  8. Linux学习笔记:cp和scp复制文件

    拷贝文件和文件夹,在Linux上通过cp命令来实现. cp:用户当前机器的文件复制 scp:通过ssh本机和其他机器的文件复制 secure copy cp a.txt b.txt scp a.txt ...

  9. Linux学习笔记(三)目录和文件都能操作的命令

    目录和文件都能操作的命令 rm cp mv rm 英文原意:remove files or directories 功能:删除文件或目录 语法:rm 选项[-fir] 文件或目录 rm -f 强制删除 ...

随机推荐

  1. RSA加密解密和读取公钥、私钥

    /// <summary>     /// RSA加密解密及RSA签名和验证    /// </summary>     public class RSADE    {    ...

  2. Powershell Mail module, 发送outbox 里的全部邮件(一个.csv文件代表一封邮件)

    把creating mail代码写到调用处,往outbox写入 mailxxx.csv文件,入面记录了邮件的主要内容 写入 #template $TMP = IMPORT-CSV "$($d ...

  3. POJ--3268--Silver Cow Party【SPFA+邻接表】

    题意:一些牛要去某一点參加聚会,然后再回到自己家,路是单向的,问花费时间最多的那头牛最少须要花费多长时间. 思路:从聚会地点返回,相当于是从某一点到其它各个点的最短路径.从牛的家中走到聚会地点,能够把 ...

  4. 持续集成环境Jenkins的搭建和使用

    这几天试着搭了个持续集成环境,我使用的是Jenkins,它的前身是Hadson,由于被Oracle收购了,所以换个名字继续开源,这个有点像MySQL. 持续集成总是跟敏捷开发什么的搞在一起,显得非常高 ...

  5. android视频库Vitamio

    之前尝试自己解码视频,然后播放显示,虽然音视频都可以播放,但是实现不了音视频的同步,所以使用第三方的视频库Vitamio来实现视频播放器功能,这样自己只需要实现播放解码的制作不不要关心底层解码和显示问 ...

  6. hdu1281+hdu2819(最大匹配数)

    分析:将行和列缩点,即行对应二分图的X部,列对应二分图的Y部,然后交点为连接该行和该列的一条边.匹配时每点都会把整行整列占了,因此就不会出现冲突了. 传送门:hdu1281 棋盘游戏 #include ...

  7. 【Gapps】安装GooglePlay引发一系列问题

    再次感谢小海的支持,感谢大家的支持! 从安装CM至如今GooglePlay,小海为我提供了非常多方案,能够说是全面支持.仅仅是出于隐私不便公开他的个人信息,仅提供一个他的博客地址http://luha ...

  8. wx_sample.php

    <?php /**   * wechat php test   */ //define your token define("TOKEN", "weixin&quo ...

  9. Struts2 拦截器具体配置过程

    拦截器差点儿遍布每个程序中,所以贴出拦截器配置的具体过程,希望可以帮到大家. Struts2 拦截器具体配置过程 <interceptors> <!-- 先定义拦截器 --> ...

  10. Compass用法指南

    Compass用法指南   Sass是一种"CSS预处理器",可以让CSS的开发变得简单和可维护.但是,只有搭配Compass,它才能显出真正的威力. 本文介绍Compass的用法 ...