1. ホーム
  2. makefile

[解決済み】makefile "そのようなファイルやディレクトリはありません"

2022-02-05 05:03:09

質問

C++のプログラムをmakeでコンパイルしようとしています。多くのチュートリアルを読んだ後、以下のようなmakeファイルにたどり着きました。

srcディレクトリからソースファイルを読み込み、buildディレクトリにオブジェクトを配置し、binディレクトリにexeを配置しています。

以下の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++: エラーです。/bin/wavfiletool.exe: そのようなファイルやディレクトリはありません g++: fatal error: no input files compilation が終了しました。*** [/bin/wavfiletool.exe] エラー 1 [0.1sで終了 終了コード2]

UPDATEです。

makefileを編集しました。一つ前のバージョンでは、.cppとc++を使用しているのに、.cを使用しているというtypoがありました。今は違うエラーが出ています。

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 

解決方法は?

すべてのディレクトリ(すなわち、BIN_DIR、SRC_DIR)がルートディレクトリ(/)になければ、それがエラーになる理由です。最初のスラッシュを削除するか、環境変数のプレフィックスとして SRC_DIR = $(MY_PROJECT_BASE_DIRECTORY)/src .