歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Linux編程 >> Linux編程

Linux 程序設計學習筆記----動手編寫makefile文件

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

Copyright © Linux教程網 All Rights Reserved