• Linux教程 | 什么是Makefile?如何编写一个Makefile?


    前言

    如果您有多个 c、c++ 和其他语言的文件,并且想通过终端命令编译它们,我们该如何编译他们呢?为了解决这类问题,Makefile就出现了。Makefile在编译大型项目的过程中,可以一次性编写大量的源文件以及需要链接器标志。废话少说咱们直接开始今天的正文!
    在这里插入图片描述

    什么是Makefile

    Makefile是一种用于简化或组织编译代码的工具,是一组具有变量名称和目标的命令(类似于终端命令),用于创建和删除目标文件的工具。在单个 make 文件中,我们可以创建多个目标来编译和删除对象、二进制文件。您可以使用Makefile多次编译您的项目(程序)。

    让我们通过一个例子来理解:

    假设我们有 3 个文件main.c(主源文件)、 misc.c(包含函数定义的源文件)、misc.h(包含函数声明)。在这里,我们将声明和定义一个名为myFunc()的函数来打印一些东西——这个函数将分别在misc.cmisc.h中定义和声明。

    misc.c

    #include 
    #include "misc.h"
     
    /*function definition*/
    void myFunc(void)
    {
       
        printf("Body of myFunc function.\n");
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    misc.h

    #ifndef MISC_H
        #define MISC_H
         
        /*function declaration.*/
        void myFunc(void);
         
    #endif
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    main.c

    #include 
    #include "misc.h"
     
    int main()
    {
       
        printf("Hello, World.\n");
        myFunc();
        fflush(stdout);
     
        return 0;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

    上面这个场景是非常常见也是最简单的一个多文件系统了,我们想要编译他,并将他们链接在一起该如何做呢?显然仅仅使用gcc等这些简单的编译器是不够的,此时我们就需要用到Makefile了。

    下面将内容放在一个名为Makefile的文件中,注意Makefile文件的名字只能是这几个字,而且区分大小写。

    Makefile

    #make file - this is a comment section
     
    all:    #target name
        gcc main.c misc.c -o main
    
    • 1
    • 2
    • 3
    • 4
    • 保存名为Makefile

    • 插入注释,后跟#字符。

    • all是一个目标名称,在目标名称之后插入:

    • gcc是编译器名称,main.cmisc.c源文件名,-o是链接器标志,main是二进制文件名。

    注意: Makefile必须使用 TAB 而不是空格缩进,否则make会失败。

    我们写好Makefile后怎么进行编译呢?下面是代码的编译过程

    没有目标名称:

    make
    
    • 1

    带有目标名称:

    make all
    
    • 1

    输出:

        sh-4.3$ make
        gcc     main.c misc.c -o main
    
        sh-4.3$ ./main
        Hello, World.
    
        Body of myFunc function.
        sh-4.3$
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    此时我们就可以看到对应文件夹里已经生成了对应的可执行文件了!这就是Makefile的作用!

    为什么会存在 Makefile?

    Makefile 用于帮助决定大型程序的哪些部分

  • 相关阅读:
    【分数限制下,专科学子将何去何从】
    序列最大收益(冬季每日一题 3)
    mockito 的 InjectMocks 和 Mock 有什么区别?
    每日一题-方舱医院
    IP网络矿用打点紧急广播方案
    spring boot+ vue+ mysql开发的一套厘米级高精度定位系统源码
    .NET WebAPI 采用 IDistributedCache 实现分布式缓存过滤器 Redis 模式
    5个独家Prompt技巧,助你玩转ChatGPT,轻松提升答案质量
    《机器学习》李宏毅(21P5-9)
    系统设计类题目汇总四
  • 原文地址:https://blog.csdn.net/qq_45172832/article/details/126904729