Linux的makefile 檔案

來源:互聯網
上載者:User

        makefile檔案由make命令執行。這個檔案裡面有一個工程的編譯規則,先編譯那個檔案,編譯順序,在很多IDE下可以自己完成。這裡只是簡單介紹,詳細內容:http://www.chinaunix.net/old_jh/23/408225.html

規則:目標:依賴

                   命令

連結外部庫,就算在開始聲明了math.h函數不會載入libmath.a庫,只有在編譯時間加入

gcc  -g -Wall  hellomath.c  -lm -o math     -lm是-libm.a簡寫。

 

Make憑藉本身的優勢,可在所有的 Unix系統中被找到。要瞭解關於Gnu
make的更多資訊,請參考 Richard M. Stallman和 Roland McGrath編寫的GNU
Make
手冊。 Make 從makefile(預設是目前的目錄下的名為‘Makefile’的檔案)中讀取項目的描述。makefile指定了一系列目標(比如可執行檔)和依賴(比如對象檔案和源檔案)的編譯規則,其格式如下:

目標:依賴
        命令

對每一個目標,make檢查其對應的依賴檔案修改時間來確定該目標是否需要利用對應的命令重建立立。注意到,makefile中命令行必須以單個的TAB字元進行縮排,不能是空格。

GNU Make 包含許多預設的規則(參考隱含規則)來簡化makefile的構建。比如說,它們指定‘.o’檔案可以通過編譯‘.c’檔案得到,可執行檔可以通過將‘.o’連結到一起獲得。隱含規則通過被叫做make變數的東西所指定,比如CC(C語言編譯器)和CFLAGS(C程式的編譯選項);在makefile檔案中它們通過獨佔一行的變數=的形式被設定。對C++,其等價的變數是CXXCXXFLAGS,而變數CPPFLAGS則是編譯預先處理選項。

現在我們為上一節的項目寫一個簡單的 makefile 檔案:

                CC=gcc
              CFLAGS=-Wall
              hello: hello.ohello_fn.o
              clean:
                      rm -f hello hello.o hello_fn.o

該檔案可以這樣來讀:使用 C 語言編譯器gcc,和編譯選項‘-Wall’,從對象檔案‘hello.o’和‘hello_fn.o’產生目標可執行檔hello(檔案‘hello.o’和‘hello_fn.o’通過隱含規則分別由‘hello.c’和‘hello_fn.c’產生)。目標clean沒有依賴檔案,它只是簡單地移除所有編譯產生的檔案。rm命令的選項
‘-f’(force) 抑制檔案不存在時產生的錯誤訊息。

另外,需要注意的是,如果包含main函數的cpp檔案為A.cpp, makefile中最好把可執行檔名也寫成 A。

要使用該 makefile 檔案,輸入make。不加參數調用make時,makefile檔案中的第一個目標被建立,從而產生可執行檔‘hello’:

              $ make
              gcc -Wall -c -o hello.o hello.c
              gcc -Wall -c -o hello_fn.o hello_fn.c
              gcc hello.o hello_fn.o -o hello
              $ ./hello
              Hello, world!

一個源檔案被修改要重建可執行檔,簡單地再次輸入make即可。通過檢查目標檔案和依賴檔案的時間戳記,程式
make可識別哪些檔案已經修改並依據對應的規則更新其對應的目標檔案:

              $ vim hello.c (開啟編輯器修改一下檔案)
              $ make
              gcc -Wall -c -o hello.o hello.c
              gcc hello.o hello_fn.o -o hello
              $ ./hello
              Hello, world!最後,我們移除 make 產生的檔案,輸入 make clean:

              $ make clean
              rm -f hello hello.o hello_fn.o一個專業的 makefile檔案通常包含用於安裝(make install)和測試(makecheck)等額外的目標。

本文中涉及到的例子都足夠簡單以至於可以完全不需要makefile,但是對任何大些的程式都使用 make 是很有必要的。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.