Makefile
EXEC=wait fork_twice
OBJS = wait.o fork_twice.o
CFLAGS +=
LDFLAGS += -L . -lzkcommon
CC=gcc
all:share_lib $(EXEC)
@echo "all done"
share_lib:
gcc -c zkcommon.c -fPIC
gcc -o libzkcommon.so zkcommon.o -shared
sudo cp libzkcommon.so /usr/lib/ -f
%.o:%.c
$(CC) -MMD -c %< -O %@ $(OBJS) $(LDFLAGS)
clean:
rm *.so -rf
rm -rf $(EXEC)
rm -rf $(OBJS)
-O2
表示优化选项,2表示最优优化,即编译器会优化你的程序;
-o
表示后边接的是文件名称;
$@
是Makefile的通配符,代指你前面指定的文件名,例如有规则%.o:%.c
,那么$@
表示xxx.o文件(xxx是你的源代码文件的名称前缀);
$<
表示搜索到的第一个匹配的文件,对于规则%.o:%.c
,$<
表示第一个找到的.c文件。
简而言之,假设在一个文件夹下有若干.c文件,那么下面的规则:
%.o:%.c
gcc -O2 -o $@ $<
表示把所有的.c文件编译成中间.o文件。