Makefile错误:没有这样的文件或目录

Makefile error: No such file or directory

本文关键字:文件 错误 Makefile      更新时间:2023-10-16

目录结构如下:

  • .src包含所有源代码(.h.cpp)
  • .bin应该包含所有.o.bin
  • .Makefile

这是我当前的Makefile:

CFLAGS = -Wall -pedantic -g
CC = g++
EXEC = flrfile
SRC_DIR = src
BIN_DIR = bin
SOURCES := $(wildcard $(SRC_DIR)/*.cpp)
OBJ := $(patsubst $(SRC_DIR)/%,%,$(SOURCES))
OBJ := $(patsubst %.cpp,%.o,$(OBJ))
OBJ := $(addprefix ../$(BIN_DIR)/,$(OBJ))
all: flrfile
../$(BIN_DIR)/%.o: $(SRC_DIR)/%.cpp $(SRC_DIR)/%.h
    $(CC) $(CFLAGS) -c $(SRC_DIR)/%.cpp -o $@
$(EXEC): $(OBJ)
    @mkdir -p $(BIN_DIR)
    $(CC) $(CFLAGS) $(BIN_DIR)/$(OBJ) -o $(BIN_DIR)/$(EXEC)
.PHONY : clean
clean:
    -rm -rf $(BIN_DIR)

当我运行make时,我得到这个错误:

g++ -Wall -pedantic -g -c src/%.cpp -o ../bin/FixedLengthFieldsRecord.o
g++: error: src/%.cpp: No such file or directory
g++: fatal error: no input files
compilation terminated.
make: *** [../bin/FixedLengthFieldsRecord.o] Error 4

为什么会这样?老实说,我对Makefile知之甚少……

正确的编译行应该是这样的:

$(BIN_DIR)/%.o: $(SRC_DIR)/%.cpp $(SRC_DIR)/%.h
    $(CXX) -o $@ -c $< $(CFLAGS)

这意味着:"对于每个匹配模式"%的文件。在$(BIN_DIR)中,使用关联的$(SRC_DIR)/%.cpp作为参数(第一个依赖项)编译它

附加注释:我怀疑一些缺失的依赖关系:通常,.c或cpp源文件不只有依赖于相应的头文件,但也可能包括项目中的其他头文件。