参照:https://www.jianshu.com/p/0b2a7cb9a469

创建工作目录,包含一下文件

  • main.c
  • person.c
  • b.h
  • c.h
/***
c.h
***/
//this is c.h
/***
b.h
***/
//this is b.h
/***
main.c
***/
#include<stdio.h>
//#include"a1.h"
//#include"b.h" int main()
{
printf("The Version 1.1\n");
return ;
}

如果main.c文件中加上注释的头文件会生成对应的b.h.gch文件,此处存疑

1.创建makefile文件:

/***
makefile
***/
app: main.o person.o other.o
gcc -o app main.o person.o other.o
main.o:main.c
gcc -c main.c a.h
person.o:person.c a.h b.h
gcc -c person.c
other.o:person.c b.h
gcc -c person.c -o other.o clean:
rm app main.o person.o other.o

2.定义变量,代替目标文件,简化代码:

objects = main.o person.o other.o
app : $(objects)
gcc -o app $(objects)
main.o : main.c
gcc -c main.c c.h
person.o : person.c c.h b.h
gcc -c person.c
other.o : person.c b.h
gcc -c person.c -o other.o clean :
rm app $(objects)

3.使用makefile自动推导机制,简化指令语句

在编译过程中,哪些类型的文件的编译需要哪些指令是固定的,所以makefile文件可以从依赖关系自动推导出后面要执行的语句

简化如下:

objects = main.o person.o

app : $(objects)
gcc -o app $(objects) main.o : main.c
person.o : person.c c.h b.h clean :
rm app $(objects)

只有依赖声明下面没有任何语句,makefile才会自动推导,否则执行指定文件。

注意:这里去掉了other.o,是因为other.o依赖person.c手动生成的other.o,这里的makefile只会生成与依赖文件相同名字的.o文件。

4.如果文件不在一个目录下,需要指定目录,只需要在makefile的第一行添加

VPATH = path1 : path2 :path3

makefile文件会自动按照路径顺序,依次查找文件

如图:

person.c文件在  /home/exbot/wangqinghe/makefileTest

b.h文件在/home/exbot/wangqinghe

c.h 文件在当前目录中2019060601 文件夹下

于是makefile 如下:

VPATH = ./ :/home/exbot/wangqinghe : /home/exbot/wangqinghe/makefileTest

CC = gcc

objects = main.o person.o

app : $(objects)
$(CC) -o app $(objects)
@echo "input information : compile finished"
#@echo "输出信息:编译完成" main.o : main.c person.o : person.c c.h b.h .PHONY : clean clean :
rm app $(objects)

make文件基础用法的更多相关文章

  1. C# settings 文件基础用法

    原文 自定义设置项类型 Serializable 修饰的枚举,可作为设置项类型 [Serializable] public enum DeviceBrand { None = 0, [Descript ...

  2. Bootstrap fileinput:文件上传插件的基础用法

    官网地址:http://plugins.krajee.com/ 官网提供的样例:http://plugins.krajee.com/file-input/demo 基础用法一 导入核心CSS及JS文件 ...

  3. find命令的基础用法以及按文件修改时间查找文件

    一般文件查找方法: find 命令学好是一件很有趣的事情,也可以帮你在查找系统文件的时候事倍功半,还可以与正则表达式结合使用,功能强大,是一个很好的查找工具.可以整体提高你的系统管理能力. 基础用法 ...

  4. logstash安装与基础用法

    若是搭建elk,建议先安装好elasticsearch 来自官网,版本为2.3 wget -c https://download.elastic.co/logstash/logstash/packag ...

  5. elasticsearch安装与基础用法

    来自官网,版本为2.3 注意elasticsearch依赖jdk,2.3依赖jdk7 下载rpm包并安装 wget -c https://download.elastic.co/elasticsear ...

  6. Smarty基础用法

    一.Smarty基础用法: 1.基础用法如下 include './smarty/Smarty.class.php';//引入smarty类 $smarty = new Smarty();//实例化s ...

  7. 前端自动化测试神器-Katalon的基础用法

    前言 最近由于在工作中需要通过Web端的功能进行一次大批量的操作,数据量大概在5000左右,如果手动处理, 完成一条数据的操作用时在20秒左右的话,大概需要4-5个人/天的工作量(假设一天8小时的工作 ...

  8. Docker 安装和基础用法

    理解Docker(1):Docker 安装和基础用法 本系列文章将介绍Docker的有关知识: (1)Docker 安装及基本用法 (2)Docker 镜像 (3)Docker 容器的隔离性 - 使用 ...

  9. Scss基础用法

    Scss基础用法 一.注释用法: (1)//comment:该注释只是在.scss源文件中有,编译后的css文件中没有. (2)/! /:重要注释,任何style的css文件中都会有,一般放置css文 ...

随机推荐

  1. List是有序的Set是无序的吗? List和Set对比

    import java.util.*; /* * List和Set对比 * */ public class ListVSSet { public static void main(String[] a ...

  2. 在Docker中部署ASP.NET Core 2.2

    ⒈新建一个ASP.NET Core2.2 Web程序 因为Windows的Docker和Linux的Docker有所不同,本次测试采用的是Linux的Docker,因此没有勾选启用Docker支持. ...

  3. Maven添加镜像仓库、更改本地仓库位置

    添加镜像仓库 在conf目录下的settings.xml文件的145行左右 id表示该镜像的id mirrorOf表示为哪个仓库配置镜像,central为默认的中央仓库的id,也可以使用通配符*,来匹 ...

  4. Dedesql数据库类详解(二次开发必备教程)

    其实数据库类织梦之前就有一个介绍,http://help.dedecms.com/v53/archives/functions/db/,这篇文章讲解了数据库类的一些常见的使用方法,不过没有结合例子去介 ...

  5. 从入门到自闭之Python函数初识

    函数初识 定义:def--关键字 ​ 将某个功能封装到一个空间中就是一个函数 功能: ​ 减少重复代码 函数的调用 ​ 函数名+():调用函数和接收返回值 函数的返回值 return 值 == 返回值 ...

  6. CSS3面包屑菜单导航

    在线演示 本地下载

  7. Linux cat命令详解(连接文件并打印到标准输出设备上)

    cat:连接文件并打印到标准输出设备上 一.命令格式: cat [-AbeEnstTuv] [--help] [--version] filename 二.参数说明: -n 或 --number:由 ...

  8. reduce一些方法对数组进行的处理

    reduce方法我之前都整理了知识点,不懂的可以看一下我之前的知识点,这次我们是整理了一些关于用reduce方法进行的一些对于数组的处理 1. reduce()求数组项之和 var arr = [3, ...

  9. 多Y轴,下拉框渲染,相同类型不同数据

    放上json文件: { "2017年3月": { "outKou": "5525.86", "inKou": " ...

  10. python 利用已有Ner模型进行数据清洗合并

    # -*- coding: utf-8 -*- from kashgari.corpus import DataReader import re from tqdm import tqdm def c ...