私はファイルを作成するのが初めてで、これを少し試行錯誤しながらまとめました。このコードは、私のc++プログラムをコンパイルするために使用されます。
makefileと同じフォルダにある私のmain.cppファイル。mainが依存するヘッダーを含むlib/フォルダーがあります。
次のmakefileを使用すると、コードが正しく完全にコンパイルされます。しかし、私は*.oオブジェクトが残されているのを見つけることを期待していました。(「クリーン」ルールの有無にかかわらず両方を作成しようとしたことに注意してください。どちらの場合も同じ結果が得られます。)
#
# Makefile
#
CXX = g++
CCFLAGS = -O3 -I/sw/include -L/sw/lib
## /sw/include and /sw/lib contain dependencies for files in my lib/
LDFLAGS = -lpng
OPTS = $(CCFLAGS) $(LDFLAGS)
SOURCES = $(wildcard lib/*.cpp) main.cpp
OBJECTS = $(SOURCES: .cpp = .o)
TARGET = spirals
$(TARGET): $(OBJECTS)
$(CXX) $(OPTS) $^ -o $@
.PHONY: depend
depend:
g++ -MM $(SOURCES) > depend
## generate dependencies list
include depend
.PHONY: clean
clean:
rm -f *.o lib/*.o $(TARGET)
また、問題が発生した場合に備えて、私はMacOSXを使用しており、プログラムはxcodeで設計されています。(xcodeには独自のビルドフローがあることは知っていますが、Linuxシステム用のコマンドラインプログラムを設計しているので、xcodeだけを経由するのではなく、bash環境でコンパイルとリンクをテストしたいと思います。)
質問:
メインターゲットが作成された後、makefilesが* .oファイルを生成することを期待するのは正しいですか?
もしそうなら、なぜ私のmakefileはこれをしないのですか?