我正在尝试使用make编译C ++程序。在阅读了不少教程后,我发现了以下make文件。
它从src目录中读取源文件,将对象放在build目录中,并将exe放在bin目录中。
当我尝试运行以下makefile时,我收到后续错误。
CC := g++
CFLAGS := -g -O2
BIN_DIR := /bin
BUILD_DIR := /build
SRC_DIR := /src
TARGET := wavfiletool.exe
SOURCES := $(wildcard $(SRC_DIR)/*.c)
OBJECTS := $(SOURCES:$(SRCDIR)/%.cpp=$(BUILD_DIR)/%.o)
$(BIN_DIR)/$(TARGET): $(OBJECTS)
$(CC) $@ $(CFLAGS) $(OBJECTS)
$(OBJECTS): $(BUILD_DIR)/%.o : $(SRC_DIR)/%.c
@$(CC) $(CFLAGS) -c $< -o $@
++ /bin/wavfiletool.exe -g -O2 g ++:error:/bin/wavfiletool.exe:没有这样的文件或目录g ++:致命错误:没有输入文件编译 终止。 make:*** [/bin/wavfiletool.exe]错误1 [以0.1秒完成 退出代码2]
更新:
我编辑了makefile。之前版本中的一个错字是当我使用.cpp和c ++时我有.c。我现在得到了一个不同的错误。
更新的MAKEFILE
CC := g++
CFLAGS := -g -O2
BIN_DIR := bin
BUILD_DIR := build
SRC_DIR := src
TARGET := wavfiletool.exe
SOURCES := $(wildcard $(SRC_DIR)/*.cpp)
OBJECTS := $(SOURCES:$(SRCDIR)/%.cpp=$(BUILD_DIR)/%.o)
$(BIN_DIR)/$(TARGET): $(OBJECTS)
$(CC) $(OBJECTS) $(CFLAGS) -o $@
$(OBJECTS): $(BUILD_DIR)/%.o : $(SRC_DIR)/%.cpp
@$(CC) $(CFLAGS) -c $< -o $@
新错误
makefile:13: target `src/WavFile.cpp' doesn't match the target pattern
makefile:13: target `src/WavFileTool.cpp' doesn't match the target pattern
g++ src/WavFile.cpp src/WavFileTool.cpp -g -O2 -o bin/wavfiletool.exe
答案 0 :(得分:1)
除非您的所有目录(即BIN_DIR,SRC_DIR)都在根目录(/)中,否则这就是您收到错误的原因。您要么删除初始斜杠,要么可以使用像SRC_DIR = $(MY_PROJECT_BASE_DIRECTORY)/src
这样的环境变量前缀。