我是论坛的新手,所以我希望我做得对。
我正在从头开始编写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。答案 0 :(得分:1)
模式规则仅在所有规则匹配时匹配。仅仅匹配目标是不够的:make还必须能够找到(或制作)规则中列出的先决条件模式和所有其他先决条件。
如果有一件事情不匹配,那么规则就不匹配了。
您可以使用make -d
查看正在尝试构建的文件,并查看哪些文件不存在并导致规则失败。
PS。这一切都假设你使用的是GNU make,你没有具体说明。