華電北風吹
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/