带子目录的通用Makefile

时间:2016-09-27 17:40:22

标签: c makefile

解决

我没有目标的* .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行的规则,则输出相同的内容。

我无法理解这一点,有没有人知道为什么它不起作用?

0 个答案:

没有答案