makefile實例(1)-helloworld


簡單makefile實例

1,源文件:

main.cpp

#include <stdio.h>

int main()
{
    printf("Hello World\n"); return 0; }

2,編寫makefile

若使用g++命令編譯鏈接程序,可以:

g++ -o hello main.cpp

g++ [-o main.o] -c main.cpp

g++ -o hello main.o

若使用make命令,則可以這么編寫makefile文件(兩種寫法分別對應了上面說的兩條g++命令):

提示:

2.1,makefile的基本格式為“目標:依賴 命令”
一個 makefile 主要含有一系列的規則,如下:
A: B
(tab)<command>
(tab)<command>
重要: 每個命令行前都必須有tab符號
舉例來說,一種簡單寫法如下:
main : main.c
  gcc main.c –o main
在終端執行make命令就可以得到main文件了

2.2 執行過程

  通常make命令會逐行解釋makefile文件,然后執行第一個”目標格式行”及其后的”目標命令行“。直到碰到下一個”目標格式行”為止。

  注意這里指的是下一個”目標格式行“,而不是文件末尾。

  所以我們把生成最后的可執行文件的makefile代碼放在第一行時,只需要鍵入make就可以。

  而有些makefile文件未將生成最后的可執行文件的代碼放在第一行,所以如果make的話,就只能執行到第一個目標格式行的code.

  另外,我們使用偽目標讓makefile執行不同的操作,如定制Debug和Release版本,清空中間生成文件,安裝軟件包等等。

2.3, 這里要說明一點的是,clean不是一個文件,它只不過是一個動作名字,其冒號后面為空,make就不會找文件的依賴性,也就不會自動執行其后所定義的命令。

要執行其后的命令,就需要在make 命令后顯式指出這個名字。這樣我們就可以定義一些與編譯無關的命令:打包程序,清理程序等外圍操作等。

 用".PHONY {目標名}"定義一個偽目標, 用"make {目標名}"執行該偽目標
.PHONY : clean
clean :
  @rm -f main *.o
  @echo 'clean'
此時執行make命令,終端會顯示系統執行的每條命令,如果你不想系統顯示它執行的命令,在每條命令的前面加上“@”即可。

hello : main.cpp
    g++ main.cpp -o hello clean: rm hello main.o -rf

hello: main.o
    g++ -o hello main.o main.o : main.cpp g++ -c main.cpp clean: rm hello main.o -rf

 

3,執行make,進行編譯鏈接,

[root@localhost 0-helloworld]#make
g++ -o hello main.o [root@localhost 0-helloworld]#ll 總用量 20 -rwxr-xr-x 1 root root 6908 11月 26 22:59 hello -rw-r--r-- 1 root root 72 11月 26 22:10 main.cpp -rw-r--r-- 1 root root 1472 11月 26 22:35 main.o -rw-r--r-- 1 root root 144 11月 26 22:51 makefile

4,執行程序

[root@localhost 0-helloworld]#./hello 
Hello World

5,清理程序

[root@localhost 0-helloworld]#make clean
rm hello main.o -rf [root@localhost 0-helloworld]#ll 總用量 8 -rw-r--r-- 1 root root 72 11月 26 22:10 main.cpp -rw-r--r-- 1 root root 151 11月 26 23:02 makefile [root@localhost 0-helloworld]#

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM