我通过Stack Overflow的复制/粘贴建议编写了一个可怕的Makefile。但是,我已经读过可能没有必要多次提供显式编译器调用(例如,-O3标志无处不在)。我该如何简化这个Makefile?
CFLAGS = -Weverything -Wno-padded -Wno-unused-parameter -Wno-unused-variable -Wno-sign-conversion
all: fianchetto.o util.o ttable.o movegen.o
clang -O3 $(CFLAGS) -D NDEBUG $^ -o fianchetto
debugf: fianchetto.o ttable.o movegen.o
clang -O3 $(CFLAGS) -g3 $^ -o fianchetto
clean:
rm *.o && rm *.gch & rm fianchetto && rm -rf fianchetto.dSYM
%.o: %.c
clang -O3 -c $(CFLAGS) $< -o $@
fianchetto.o: fianchetto.c
ttable.o: ttable.h ttable.c
movegen.o: movegen.h movegen.c
util.o: util.h util.c
我对很多语法感到困惑,并希望简化工作的链接或解释工作!
答案 0 :(得分:2)
(0>s?(s=-s,'-'):0)+
和定义(无论如何应该在CFLAGS
中)在链接时无用CPPFLAGS
),make会自动链接目标。 Make也知道如何编译C源文件(只要源和对象路径匹配),所以你的模式规则也是多余的。fianchetto: fianchetto.o
标志集为您生成依赖项。-M
分配给cc
,CC
应该是系统默认编译器的链接,因此您可能根本不需要下面的第一行cc