即使%.o已定义,也没有规则来制作东西

时间:2014-04-03 14:13:19

标签: c makefile

我是论坛的新手,所以我希望我做得对。

我正在从头开始编写C项目的Makefile。它在某个时候工作,然后我尝试改进它(包括单独的文件夹),我得到了众所周知的错误“没有规则制作目标”obj / autresFonctions.o“,需要”CUR“”。或类似的,因为它不是英文的,我翻译了。

这似乎很奇怪,因为我期望工作的规则是使用%.o并且应该匹配anyhting。因此,我不认为这可能是一个错字。

这是Makefile:

EXE=prgm
CC=gcc

SRC_DIR=src
OBJ_DIR=obj
INCLUDE_DIR=include

_FICHIERS_H = autresFonctions.h calculPrealable.h constantes.h fonctionsAnnexes.h fonctionBoucles.h lectureFichiers.h main.h
FICHIERS_H = $(patsubst %, $(INCLUDE_DIR)/%, $(_FICHIERS_H))

_OBJ = autresFonctions.o calculPrealable.o fonctionsAnnexes.o fonctionsBoucles.o lectureFichiers.o main.o
OBJ = $(patsubst %, $(OBJ_DIR)/%, $(_OBJ))


FLAGS=-Wall -Wextra



CUR: $(OBJ)
    $(CC) -o $(EXE) $^

$(OBJ_DIR)/%.o: $(SRC_DIR)/%.c $(FICHIERS_H)
    $(CC) $(FLAGS) -c -o $@ $< 

clean:
    rm $(OBJ) $(EXE) 

我假设其他人也一样。因为我也尝试在_OBJ中切换前两个.o,并且我在calculPrealable.o时遇到了同样的错误

我只是在编译时键入“make”,以获得主要目标CUR。我位于主目录中,其中包含include /(带有.h),src /(带有.c)和obj /(空)。

编辑:我忘了说,但我使用的是通常的GNU make。

1 个答案:

答案 0 :(得分:1)

模式规则仅在所有规则匹配时匹配。仅仅匹配目标是不够的:make还必须能够找到(或制作)规则中列出的先决条件模式和所有其他先决条件。

如果有一件事情不匹配,那么规则就不匹配了。

您可以使用make -d查看正在尝试构建的文件,并查看哪些文件不存在并导致规则失败。

PS。这一切都假设你使用的是GNU make,你没有具体说明。

相关问题