makefile小例子

華電北風吹
2017年4月9號

一、用到的三個代碼
主函數代碼:

#include <stdio.h>
#include <stdlib.h>
#include "LinkList.h"

int main()
{
    LinkList* lst=(LinkList*)malloc(sizeof(LinkList));
    InsertAtHead(lst,1);
    InsertAtHead(lst,2);
    PrintLinkList(lst);
    return 0;
}

自定義類頭文件:

#include <stdio.h>

typedef struct Node_
{
    int data;
    struct Node_ *next;
}Node;

typedef struct LinkList_
{
    Node* root;
    int length;
}LinkList;

void InsertAtHead(LinkList* root,int data);

int GetLength(LinkList* root);

void PrintLinkList(LinkList* root);

自定義類實現文件

#include <stdio.h>
#include <stdlib.h>
#include "LinkList.h"

void InsertAtHead(LinkList* lst,int data)
{
    Node* newroot=(Node*)malloc(sizeof(Node));
    newroot->data=data;
    newroot->next=lst->root;
    lst->root=newroot;
    lst->length++;
}

int GetLength(LinkList* lst)
{
    return lst->length;
}

void PrintLinkList(LinkList* lst)
{
    int i=0;
    Node* p=lst->root;
    while(p!=NULL)
    {
        printf("This is the %d item: %d\n",i,p->data);
        i++;
        p=p->next;
    }
}

二、makefile講解
1、第一個makefile

mainf : mainfunc.o LinkList.o
    gcc -o mainf mainfunc.o LinkList.o
    #make succeed
mainfunc.o : mainfunc.c LinkList.h
    gcc -c mainfunc.c
    #start make
LinkList.o : LinkList.c LinkList.h
    gcc -c LinkList.c
clean:
    rm mainf mainfunc.o LinkList.o
    #clean succeed

第一個makefile可以看一下make執行步驟。在將makefile文件與代碼放同一個文件夾下後,執行make命令,即會編譯成.o目標文件和連接後的可執行文件mainf。執行./mainf即可運行。

2 、第二個makefile

object=mainfunc.o LinkList.o
mainf : $(object)
    gcc -o mainf $(object)
    #make succeed
mainfunc.o : mainfunc.c LinkList.h
    #start make
    gcc -c mainfunc.c
LinkList.o : LinkList.c LinkList.h
    gcc -c LinkList.c
clean:
    rm mainf $(object)
    #clean succeed

在第二個makefile文件中,定義了一個變量object,來替換出現多次的mainfunc.o LinkList.o。可以理解爲C語言裏的宏定義。

3、第三個makefile

object=mainfunc.o LinkList.o
mainf : $(object)
    gcc -o mainf $(object)
    #make succeed
$(object):LinkList.h
mainfunc.o : mainfunc.c
LinkList.o : LinkList.c
clean:
    rm mainf $(object)
    #clean succeed

第三個makefile更簡單,之描述了依賴關係,在編譯連接的時候只出現了一行代碼gcc -o mainf $(object),爲每一個.o分別寫一個命令行編譯的代碼沒有了,這一塊就需要GUN Make自己推導了。

參考資料:
http://www.cnblogs.com/sld666666/archive/2010/04/08/1707789.html
http://blog.csdn.net/ruglcc/article/details/7814546/

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章