C++ Makefile错误:没有这样的文件或目录
我有一个目录结构:C++ Makefile错误:没有这样的文件或目录,c++,makefile,C++,Makefile,我有一个目录结构: \src包含所有源代码(.h和.cpp) \bin应具有所有.o和.bin 具有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 := $(pat
包含所有源代码(\src
和.h
).cpp
应具有所有\bin
和.o
.bin
具有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)/%.o:$(SRC_DIR)/%.cpp$(SRC_DIR)/%.h
$(CXX)-o$@-c$<$(CFLAGS)
这意味着:“对于与$(BIN_DIR)中的模式“%.o”匹配的每个文件,使用关联的$(SRC_DIR)/%.cpp作为参数编译它(第一个依赖项)
附加注释:我怀疑缺少一些依赖项:通常,.c或cpp源文件不仅仅依赖于相应的头文件,还可能包括项目中的其他头文件。相关:由于您使用的是
g++
,因此应该使用cxflags
。此外,还有一个全新的工作在自由软件世界中,很多人都不知道它。你可以使用$(CXX),而不是使用$(CC)(并为它指定一个默认值以外的值),其默认值通常为g++。我根据您的建议编辑了我的Makefile,现在得到了以下错误:make:**没有规则使目标“../bin/FixedLengthFieldsRecord.o”成为“flrfile”所需。停止。
这不是来自我在这里给出的配方,而是来自“link”配方:您有以下依赖项:$(OBJ)
,解析为类似于。/bin/FixedLengthFieldsRecord.o
的内容,因此make搜索一个配方来构建该文件,但没有找到任何配方,因此出现错误消息。替换OBJ:=$(addprefix../$(bin_DIR)/,$(OBJ))
byOBJ:=$(addprefix$(bin_DIR)/,$(OBJ))
应该可以。现在我得到了致命错误:无法创建bin/FixedLengthFieldsRecord.o:没有这样的文件或目录
:(文件夹bin
存在吗?