解决
我没有目标的* .h文件,导致它无法使用我的规则。
我正在尝试使用以下项目结构为C项目编写Makefile,但我无法理解为什么我当前的Makefile无效。
project
|-src
| |-tests
所以我想编译我的测试并在src / tests中运行它们。我当前的Makefile看起来像这样。
0 CC=gcc
1 FLAGS=-std=gnu11 -Wall -Werror -lcunit
2
3 DIR_SRC=src
4 DIR_DIST=dist
5 DIR_TEST=src/tests
6
7 SRC = $(wildcard $(DIR_SRC)/*.c)
8 TAR = $(SRC:.c=.o)
9 SRC_TEST = $(wildcard $(DIR_TEST)/*.c)
10 TAR_TEST = $(SRC_TEST:.c=.o)
11
12 all: $(TAR)
13
14 tests_all: $(TAR_TEST)
15
16 tests_clean:
17 rm -f $(TAR_TEST)
18
19 $(DIR_TEST)/%.o: $(DIR_TEST)/%.c $(DIR_TEST)/%.h
20 $(CC) -c $(FLAGS) $< -o $@
但是当我跑make tests_all
时,我得到了这个:
gcc -c -o src/tests/test_tree.o src/tests/test_tree.c
我猜是默认规则,因为如果我删除第19-20行的规则,则输出相同的内容。
我无法理解这一点,有没有人知道为什么它不起作用?