第二题 - MakeFile - 编写用于测试的 MakeFile
本节目录
题目要求
编写你的第一个 Makefile 并运行,使结果能够通过测试。结果应该是,既生成可执行文件 exercise-02,又生成可执行文件 exercise-02_test。
输入
# 将会在测试脚本中尝试:
make all
输出
应该产生一个名为 exercise-02 的可执行文件和一个名为 exercise-02_test 的可执行文件。
已有代码介绍
已有四个源代码文件和一个 MakeFile 文件,你只需要修改 MakeFile 文件即可。
源代码文件
main.c: 程序的入口点functions.c: 提供各种函数,其中包括 hello 函数functions.h: 提供函数声明test.c: 用于提供测试的源代码文件
MakeFile 文件
CC ?= gcc
CFLAGS ?= -std=c11 -Wall -Wextra -Wpedantic -Werror -g
LDFLAGS ?= -Wl,--as-needed -Wl,--no-undefined
OUTPUT_DIR ?= .
SRCS = main.c functions.c
OBJS = $(SRCS:.c=.o)
TARGET = $(OUTPUT_DIR)/exercise-02
TEST_SRCS = test.c functions.c
TEST_OBJS = $(TEST_SRCS:.c=.o)
TEST_TARGET = $(OUTPUT_DIR)/exercise-02_test
all: $(TARGET) test
$(OUTPUT_DIR):
mkdir -p $(OUTPUT_DIR)
$(TARGET): $(OBJS)
# 在这里指定 TARGET 的构建命令
$(TEST_TARGET): $(TEST_OBJS)
# 在这里指定 TEST_TARGET 的构建命令
%.o: %.c
# 在这里指定所有 C 文件的编译命令
test: $(TEST_TARGET)
$(TEST_TARGET)
clean:
rm -f $(TARGET) $(TEST_TARGET) $(OBJS) $(TEST_OBJS)
提示
你需要在 MakeFile 文件中的中文注释附近,完成所需要执行的逻辑。有和上一题相似的地方的话,可以考虑复用。剩下的内容,如果遇到困难,那么大概率是因为三种情况引起:
- 对 MakeFile 不熟,读不懂框架代码
- 只熟悉写死的 MakeFile,不知道使用 MakeFile 里的变量,读不懂框架代码
- 对 gcc 编译不熟,知道怎么写 MakeFile 但是不知道怎么写编译命令
如果遇到上面问题,可以对症下药,通过视频、AI、问老师等多种方式进行解决。
注意事项
不要修改源代码文件!