小项目使用`make`有什么好处?

Goo*_* Lu 8 compiling scripting development make

我已经看到这make对大型项目很有用,尤其是在 a 中描述的令人困惑的依赖项Makefile,并且还有助于工作流程。我还没有听说make用于小型项目的任何优势。有吗?

小智 15

许多其他人正在研究更复杂的 makefile 的细节以及随之而来的许多复杂性。我通常出于完全不同的原因使用 makefile:

我不想记住任何事情。

即使您的项目非常无聊和简单,并且您没有“正确”使用 makefile:

all:
    gcc main.c -o project
Run Code Online (Sandbox Code Playgroud)

与更复杂的项目相比,我不需要考虑它或以任何不同的方式对待它:

all:
    gcc libA.c libB.c main.c -o project2
Run Code Online (Sandbox Code Playgroud)

或者如果我指定了标志(例如-O2),我不需要记住它们是什么。

此外,如果您从一个简单的 makefile 开始,并且稍后需要合并/重构内容,则无需记住以不同方式构建每个项目。


G-M*_*ca' 11

与什么相反?

假设您有一个程序,您已将其拆分为两个文件,并富有想象力地将其命名为file1.c和 file2.c. 您可以通过运行来编译程序

cc file1.c file2.c -o yourprogram
Run Code Online (Sandbox Code Playgroud)

但这需要每次都重新编译这两个文件,即使只有一个文件发生了变化。您可以将编译步骤分解为

cc -c file1.c
cc -c file2.c
cc    file1.o file2.o -o yourprogram
Run Code Online (Sandbox Code Playgroud)

然后,当您编辑其中一个文件时,仅重新编译该文件(无论您更改了什么,都执行链接步骤)。但是,如果您编辑了一个文件,然后又编辑了另一个, 并且您忘记编辑了两个文件,并且不小心只重新编译了一个,该怎么办?

此外,即使只有两个文件,那里也有大约 60 个字符的命令。打字很快就会变得乏味。好的,当然,您可以将它们放入脚本中,但是您每次都需要重新编译。或者您可以编写一个非常花哨、复杂的脚本来检查哪些文件已被修改并且只进行必要的编译。你明白我要去哪里了吗?

  • 一旦我开始向编译器命令行添加开关(即使对于一个源文件),我发现下次记住它们变得很棘手。有时我会在源文件中添加注释,但那时我应该只使用 Makefile ...... (2认同)

小智 5

即使是小项目,它也有助于控制依赖逻辑并自动构建。我还用它来触发安装和卸载,所以它是一个重置舞台的主开关。