CC ?= gcc
CFLAGS = -Wall -I/home/coc/target/sysroots/corei7-64-poky-linux/usr/include/libxml2
LDFLAGS = -L/home/coc/target/sysroots/corei7-64-poky-linux/usr/libs
LIBS = -lxml2
object = cJSON.o xmltojson.o
xmltojson : $(object)
${CC} -o xmltojson $(object) -lm `pkg-config --cflags --libs libxml-2.0`
cJSON.o: cJSON.c
${CC} -c cJSON.c
xmltojson.o: xmltojson.c
${CC} -c xmltojson.c `pkg-config --cflags --libs libxml-2.0`
clean:
rm xmltojson $(object)
我有一个需要,想要写一个xmltojson转化的程序,于是想要写一个makefile来试验一下,参照《跟我一起写makefile》,
结构并不复杂,有两个C文件,两个头文件,以及一个供程序启动时的动态库,首先指定编译器,cc ?=gcc 假如不存在的话
则使用gcc 编译器,否则使用系统默认编译器.CFLAGS 是用来说明动态库的头文件路径,LDFLAGS是指动态库的库文件路径,
LIBS则是指链接时具体的库.
我用object来指定中间文件,通过中间文件来生成具体的可执行文件,xmltojson 是具体的可执行文件的名字,假如$(object)的
日期比xmltojson的新,那么就会执行后面所执行的命令来生成xmltojson文件。如果xmltojson所依赖的.o中间文件并不存在,那么
就会执行后面所进行的操作。
但是我并没有使用CFLAGS 和 LDFLAGS,而是通过 pkg-config -cflags --lib libxml-2.0来查找具体的库和头文件路径,并加以
链接。但是都是一样,有兴趣可以试一下。
最后,定义clean规则来删除可执行文件和中间文件。
类似于clean规则一样,我们还可以添加类似
install:
之类的命令来个性化定制我们的makefile
假如想要生成两个可执行文件,那么需要前面设置all: exe1 exe2