Cyven's Braindump

Makefile

Makefile 是描述项目构建逻辑的“说明书”,它定义了目标文件、源代码及其依赖关系,并指导 Make 工具进行自动化的增量编译。

如果用一个词概括: 【蓝图】 (Blueprint)

make 和 makefile 的关系就像主厨和菜谱

demo

  ### If you wish to use extra libraries (math.h for instance),
### add their flags here (-lm in our case) in the "LIBS" variable.

LIBS = -lm

###
CFLAGS  = -std=c99
CFLAGS += -g
CFLAGS += -Wall
CFLAGS += -Wextra
CFLAGS += -pedantic
CFLAGS += -Werror
CFLAGS += -Wmissing-declarations
CFLAGS += -DUNITY_SUPPORT_64 -DUNITY_OUTPUT_COLOR

ASANFLAGS  = -fsanitize=address
ASANFLAGS += -fno-common
ASANFLAGS += -fno-omit-frame-pointer

.PHONY: test
test: tests.out
        @./tests.out

.PHONY: memcheck
memcheck: ./*.c ./*.h
        @echo Compiling $@
        @$(CC) $(ASANFLAGS) $(CFLAGS) test-framework/unity.c ./*.c -o memcheck.out $(LIBS)
        @./memcheck.out
        @echo "Memory check passed"

.PHONY: clean
clean:
        rm -rf *.o *.out *.out.dSYM

tests.out: ./*.c ./*.h
        @echo Compiling $@
        @$(CC) $(CFLAGS) test-framework/unity.c ./*.c -o tests.out $(LIBS)

can make work without Makefile