详解Makefile, 使用make命令构建C/C++项目

Makefile的理解与使用

  • 一、Makefile 简介
    • 基本开发环境
    • 什么是Makefile
  • 二、g++ 编译基础
  • Makefile 的基本结构
  • 四、自动编译.cpp文件
  • 待更新

一、Makefile 简介

基本开发环境

在编写 Makefile 之前,首先需要配置好编译环境。本文示例将在 macOS 和 Linux 环境下使用 g++ 作为编译器,make 作为编译工具。如果你使用的是 Windows,可以通过安装 MinGW 或 WSL 来模拟 Linux 环境。

  1. 操作系统
    macOS/Linux:这些系统默认会自带终端,可以直接运行 g++ 和 make。
    Windows:需要安装 MinGW 或使用 Windows Subsystem for Linux (WSL) 进行开发。

  2. 安装 g++
    确保你已经安装了 GNU C++ 编译器。可以通过以下命令来检查是否安装:

    g++ --version
    
  • 如果没有安装,可以通过以下命令安装:

  • macOS:使用 Homebrew 安装

    brew install gcc
    
  • Linux:使用包管理器安装

    sudo apt-get install g++  #ubuntu
    sudo yum install g++      #centOS
    
  1. 安装 make
    make 是执行 Makefile 的工具,通常系统已预装,可以用以下命令检查:
    make --version
    
  • 若未安装,可用以下方式:
    macOS:已自带 make 工具,如果没有,可以安装 Xcode Command Line Tools
    xcode-select --install
    
    Linux
    sudo apt-get install make   #ubuntu
    sudo yum install make       #centOS
    
    1. 验证环境
      在终端中输入以下命令,确保 g++ 和 make 都已正确安装并可用:
    g++ --version
    make --version
    
    在这里插入图片描述

什么是Makefile

在编写 C 或 C++ 等程序时,随着项目文件变得越来越多,手动编译每个文件会变得非常繁琐。这时,Makefile 就可以帮助我们自动化编译流程。

Makefile 是一个自动化工具的配置文件,它告诉 make 工具如何编译和链接项目的文件。通过定义规则和依赖关系,make 可以只编译修改过的文件,提高编译效率。

二、g++ 编译基础

在没有 Makefile 的情况下,我们通常会通过命令行手动编译 C++ 文件(C同理, 使用gcc)。比如,假设我们有一个 main.cpp 文件,可以使用以下命令进行编译:

g++ -o my_program main.cpp

这条命令做了以下几件事:

  • g++:GNU 的 C++ 编译器。
  • -o my_program:指定输出文件名为 my_program。
  • main.cpp:输入源代码文件。
    如果有多个 .cpp 文件,比如 main.cpp 和 hello.cpp,你可以使用以下命令:
g++ -o my_program main.cpp hello.cpp

但是,手动编译多个文件会随着项目变大变得麻烦,所以我们可以用 Makefile 来简化这一过程。

Makefile 的基本结构

Makefile 的基本结构是由目标(target)、依赖(dependencies) 和命令(commands) 构成的。它告诉 make 如何将多个源文件编译成最终的可执行文件。

一个简单的 Makefile 可能如下所示:

my_program: main.o hello.o
    g++ -o my_program main.o hello.o
  • my_program 是目标,即最终要生成的可执行文件。
  • main.ohelper.o 是依赖文件(即中间文件)。
  • g++ -o my_program main.o hello.o 是命令,用于将 .o 文件链接成可执行程序。
  • 生成的可执行文件可以用 ./my_program运行
  • 示例: 我的代码结构
    在这里插入图片描述
  • 运行结果
    在这里插入图片描述

四、自动编译.cpp文件

  • 在上面的示例中,.o文件是中间编译文件。为了自动生成这些 .o 文件,我们可以为每个 .cpp 文件编写规则:
main.o: main.cpp
    g++ -c main.cpp

helper.o: hello.cpp
    g++ -c hello.cpp
  • g++ -c 用于编译 .cpp 文件,但不链接,生成 .o文件。
    完整的 Makefile 现在看起来像这样:
my_program: main.o hello.o
    g++ -o my_program main.o hello.o

main.o: main.cpp
    g++ -c main.cpp

helper.o: hello.cpp
    g++ -c hello.cpp
  • 使用 make 命令后, 会自动查找当前目录下的 Makefile 文件, 并执行文件中的命令, 并且会在当前目录下创建所需的 .o文件, 最后执行 my_program
    在这里插入图片描述

待更新

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

星河&'

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值