拡張子が.cのすべてのファイルをオブジェクトフォルダーにコンパイルしてから、実行可能ファイルを作成しようとしています。しかし、私が使用しているMakefileは、ソースファイルをまったく登録していません。代わりに、コマンドを呼び出して、存在しないオブジェクトファイルを使用して実行可能ファイルを作成します。
Makefileは次のとおりです。
CC = clang
SOURCE_DIR = src
OBJECT_DIR = objects
EXECUTABLE = main
SOURCES = $(wildcard $(SOURCE_DIR)/*.c)
OBJECTS = $(patsubst $(SOURCE_DIR)/%.c, $(OBJECT_DIR)/%.o, $(SOURCES))
all: $(OBJECTS)
$(CC) $^ -o $(EXECUTABLE)
clean:
rm objects/*.o main
$(OBJECT_DIR)/%.o: $(SOURCE_DIR)/%.c
$(CC) -c $< -o $@
.PHONY: all $(OBJECTS)
そしてここに出力があります:
me@hostname:~/parent_dir$ make
clang objects/main.o objects/test.o -o main
clang: error: no such file or directory: 'objects/main.o'
clang: error: no such file or directory: 'objects/test.o'
clang: error: no input files
make: *** [Makefile:11: all] Error 1
そして、これがファイル構造です:
parent_dir:
\ objects (empty):
\ src:
- main.c
- test.c
- Makefile
交換:
.PHONY: all $(OBJECTS)
と:
.PHONY: all
オブジェクトファイルは偽のターゲットではなく、偽のターゲットであるとmake
言うと、そのようなファイルが存在する必要がないことがわかります。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加