簡體   English   中英

如何編寫Makefile來編譯一個簡單的C程序

[英]How to write a Makefile to compile a simple C program

編譯以下程序

#include <stdio.h>
int main(void)
{
   printf ("Hello from your first program!\n");
   return 0;
}

a)-by使用Makefile類型的文件

b) - 可執行文件將命名為Hello

“請幫忙做一個練習。我知道如何在CodeBlocks中做到這一點,但我不知道Makefile是什么以及如何在Linux中編寫它。我使用命令”gcc filename.c“編譯它,隨后”./ a.out“但我仍然不明白Makefile是什么。它是一種shell腳本,一條指令嗎?這個任務的Makefile怎么樣看起來好像?提前感謝:)”

這是你的hello程序的簡單make文件。

CC      = gcc
CFLAGS  = -g
RM      = rm -f


default: all

all: Hello

Hello: Hello.c
    $(CC) $(CFLAGS) -o Hello Hello.c

clean veryclean:
    $(RM) Hello

假設你在一個名為makefile.m1makefile.m2目錄中有兩個makefiles ,如果你想構建make文件那么請使用下面的命令

make -f makefile.m1
make -f makefile.m2

或使用包含以下內容的單個Makefile

m1:
  make -f makefile.m1

m2:
  make -f makefile.m2

並使用make m1make m2

現在讓我們清楚你對make文件名稱的疑問一定不要要求Makefile

您可以根據需要為makefile命名。 假設我想給名字myfirstmakefile.mk 要在以后使用它,你需要告訴make你想要什么makefile。 使用-f選項:

make -f myfirstmakefile.mk

再次說明.mk也不是manadatory你可以使用你想要的任何東西,但永遠不會忘記使用-f選項。

所以這對你有意義。

makefilemake實用程序的一個配方,如何使用shell運行的一組命令從其他一些文件(稱為依賴項)創建一些文件(稱為目標 )。 makefile通常如下所示:

target: dependency [...]
        command1
        command2

嘗試運行man make以獲取詳細信息。

現在,對於您的任務,實際上不需要Makefile,因為make具有內置規則,知道如何編譯簡單程序。 您需要做的就是將C源放在以可執行文件名( Hello )和.c擴展名命名的文件中,即Hello.c

那么簡單

$ make Hello
cc     Hello.c   -o Hello

做一切。 如果你想使用gcc而不是cc,你可以運行

$ rm Hello
$ make CC=gcc Hello
gcc     Hello.c   -o Hello

如果你告訴你的教練/老師/教授你需要一個空的makefile,因為你知道內置的規則是正確的,你會得到一些額外的功勞,也許你的導師已經學到了新東西:-)如果你要求提供參考,您可以引用制作手冊的相關部分,或者像專業人士那樣,從制造實用程序POSIX標准引用默認規則部分。

在去makefile之前你必須知道它是什么以及為什么我們需要它

什么是Makefile?

Makefile是一個用某種規定語法編寫的腳本,它有助於通過編譯和鏈接從源文件構建目標輸出(通常是一個或多個可執行文件)。 簡單來說,makefile將以簡單快捷的方式編譯您的源代碼。 為什么我們需要Makefile?

=>大型項目可以包含多個源文件,這些源文件相互依賴或以分層方式排列,例如,為了編譯文件A,您必須先編譯B; 為了編譯B,你必須先編譯C; 等等。

=> Make是解決這些問題的方法。 它可以用來以良好的方式編譯整個項目,並根據你的make規則生成你的目標(我們將在后面討論),輸入make命令。

=>一個重要的特性是,在幾次更改后重新編譯項目時,它將僅重新編譯那些已更改的文件以及依賴於它的任何其他文件。 這節省了大量時間。

=>對於大型項目,當對源進行一些更改時,每次手動重新編譯整個項目都是繁瑣,容易出錯且耗時的。

這是一個很好的鏈接: 如何編寫第一個makefile

makefile是計算機的配方,具有如何執行某些任務以及這些任務之間的依賴關系的指令。

在簡單的形式中,它看起來像這樣:

a.out: filename.c
        gcc filename.c

閱讀:“要從filename.c構建a.out ,運行命令gcc filename.c 。如果a.outfilename.c更新,則不要執行任何操作”

注意: gcc行中的第一個字符必須是制表符。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM