最近在学GTK,从网上找了很多小例子,都放在了一个目录里,有的测试字体,有的测试文本视图,不一而足。偏偏编译这些例子的命令行,打起来比较麻烦,记起来也不容易,这时我就又想起了makefile。
用makefile分别编译这些例子,用到哪个编译哪个,就方便多了。这样的makefile怎样写呢?
比如有helloworld.c、font.c、textview.c、font1.c几个例子,我写的makefile如下:
lgtk3=`pkg-config --cflags --libs gtk+-3.0`
help:Makefile
@echo make hello
@echo make font
@echo make textview
@echo make font1
hello: helloworld.c
gcc -o $@ $^ $(lgtk3)
font: font.c
gcc -o $@ $^ $(lgtk3)
textview: textview.c
gcc -o $@ $^ $(lgtk3)
font1: font1.c
gcc -o $@ $^ $(lgtk3)
用的时候,如果只打make命令,就会显示帮助信息。如果想要编译helloworld.c,就使用make hello,其它依次类推。
$@表示冒号前面的内容,$^表示冒号后面的内容。
lgtk3是一个变量,也可以理解成是一个宏定义,$(lgtk3)就是把这个变量(或宏定义)代入到命令行中。
比如make hello时,执行的命令就是:
gcc -o hello helloworld.c `pkg-config --cflags --libs gtk+-3.0`
要注意的是每个@echo和gcc之前的缩进,必须使用一个tab字符,不能用多个空格替代。这是硬性约定,不存在为什么的问题。