最簡單的makefile, 沒有用到預設的函式庫。
CFLAGS = -g -Wall -std=gnu99 -O3
LDLIBS=
OBJECTS=
CC=gcc
$(P): $(OBJECTS)
使用時,看你的源碼(.c)是什麼檔,
例如hell.c
那就 export P=hell (不用寫.c)
就可以編譯了。這有個好處,就是當有很多小小的測試語句文法的源碼(.c)檔,只要改一下export P=想要測試的源碼,即可編譯,覺得實在很方便。
如果用到非標準庫呢? 如GSL,GNU 的科學計算庫,你可以用套件管理員安裝,
測試例子為gsl_erf.c,
/* Compile with:
export LDLIBS="`pkg-config --libs gsl`"
export CFLAGS="`pkg-config --cflags gsl` -g -Wall -std=gnu11 -O3"
make gsl_erf
*/
#include <gsl/gsl_cdf.h>
#include <stdio.h>
int main(){
double bottom_tail = gsl_cdf_gaussian_P(-1.96, 1);
printf("Area between [-1.96, 1.96]: %g\n", 1-2*bottom_tail);
}
這時候 makefile可以這樣寫,
CFLAGS = -g -Wall -std=gnu99 -O3
LDLIBS= pkg-config --libs gsl
OBJECTS=
CC=gcc
$(P): $(OBJECTS)
編譯成功,或是
CFLAGS = -g -Wall -std=gnu99 -O3
LDLIBS= -lgsl -lgslcblas -lm
OBJECTS=
CC=gcc
$(P): $(OBJECTS)
不用IDE,就必須要多了解一些東西,
make 是編譯C源碼的利器。本次內容所提到的makefile的寫法,對於多個含有main的小檔共用一個makefile, 只要export 要編譯的程式名稱即可。未來大量測試函數庫,文法時挺好用。
網路上google 到的一些makefile 的編寫入門,可以發現這個算是最簡單的。簡單到有點不可思議,才知道make指令,
是有點人工智慧,會多做一些額外的工作,讓我們少做一點事。