Befroe Beginning.
之前定了暑假的plan ,關於Linux的書籍現在在看的是ALP和Linux高級程序設計(楊宗德)第三版.在計劃中的是Linux高級環境編程.
現在開始關於Linux程序設計的第一篇學習筆記.
本來打算把名字寫成教程,不過覺得自己完全是新手在自學,還是寫學習筆記比較負責和適合.
希望可以一起學習進步.
Linux程序設計(原書第2版)(PDF中文版 + 源碼) http://www.linuxidc.com/Linux/2011-04/34147.htm
u-boot Makefile完全解讀 http://www.linuxidc.com/Linux/2013-04/83529.htm
實驗平台上Makefile詳細的解釋 http://www.linuxidc.com/Linux/2014-01/94827.htm
Makefile之Linux內核模塊的Makefile寫法分析 http://www.linuxidc.com/Linux/2013-06/85842.htm
Makefile之寫demo時的通用Makefile寫法 http://www.linuxidc.com/Linux/2013-05/84679.htm
Makefile之大型工程項目子目錄Makefile的一種通用寫法 http://www.linuxidc.com/Linux/2013-05/84678.htm
引入
首先我們假設這樣一個場景.我們有一個程序包含了三個文件,分別是源碼文件main_plus,c和function_plus.c以及頭文件mydefine_plus.h.
其中main主要是調用功能函數,功能函數則是實現簡單的累加,頭文件聲明函數和一些庫函數.代碼分別如下:
main_plus.c
/*************************************************************************
> File Name: main_plus.c
> Author: suool
> Mail: [email protected]
> Created Time: 2014年07月23日 星期三 17時31分23秒
************************************************************************/
/**@file main_plus.c */
/** 接收參數,調用功能函數,輸出結果. */
#include "mydefine_plus.h"
int main(void)
{
int a=0, b=0;
printf("這是一個求和的程序,請輸入數字a和b,程序講輸出a到b的累加結果.\n");
printf("Please enter integer a:");
scanf("%d", &a);
printf("\nPlease enter integer b:");
scanf("%d", &b);
if(a>b)
{
printf("\nThe sum is %d\n", plus(b,a));
}
else
{
printf("\nThe sum is %d\n", plus(a,b));
}
return 0;
}
mydefine_plus.h.
/*************************************************************************
> File Name: mydefine_plus.h
> Author: suool
> Mail: [email protected]
> Created Time: 2014年07月23日 星期三 17時36分16秒
************************************************************************/
/** @file mydefine_plus.h */
/** 函數聲明和包含*/
#ifndef _MYDEFINE_PLUS_H
#define _MYDEFINE_PLUS_H
#include <stdio.h>
int plus(int a, int b);
#endif
現在我們要編譯這個程序,我們可以怎麼做呢?
這就是這次要解決的問題.
make文件編寫
對於上面的問題,我們傳統的解決方法是這樣的:
即是分別編譯這兩個文件,然後鏈接變成目標可執行文件,
當然,對於三個甚至五個的這樣的程序都是可以的,但是如果對於更大的程序呢?
或者我們修改了某個程序,難道要重新編寫這些命令?
顯然,這不是一個明智的選擇,因此,我們便導出make文件,即自動執行編譯的文件.只要執行一下make命令,everything is done !
so, let`s see how to do it.
首先我們先把這個程序的文件的makefile文件貼一下,如下:
makefile
main : main_plus.o function_plus.o
gcc -o main main_plus.o function_plus.o
main_plus.o : main_plus.c mydefine_plus.h
gcc -c main_plus.c
function_plus.o : function_plus.c mydefine_plus.h
gcc -c function_plus.c
clean:
rm -f *.o main
makefile文件的注釋是#後面的語句.
有Makefile文件後,不管我們什麼時候修改了源程序當中的什麼文件,我們只要執行make命令,我們的編譯器都只會去編譯與我們修改的文件有關的文件,其它的文件不會處理.
驗證如下:先執行一次make命令,如下:
這次自動編譯了兩個c文件,我們現在修改function_plus.c文件,再次執行make命令,結果如下:
這次只是對剛剛修改的文件進行了編譯.
更多詳情見請繼續閱讀下一頁的精彩內容: http://www.linuxidc.com/Linux/2014-07/104614p2.htm