パス置換が正しく機能しません。にたくさんのソースファイルがありますSOURCES
:
@echo $(SOURCES)
foo.c bar.cpp bah.cxx
そして、オブジェクト ファイルのリストが必要です。
# Imaginary only because nothing works
@echo $(OBJECTS)
foo.o bar.o bah.o
OBJECTS
のリストを作成しようとしていpatsubst
ます。まず、ソース ファイルとオブジェクト ファイルのリストが作成されます。間違っているだけ_main
でなく、リンクに失敗する重複を引き起こします。
OBJECTS = $(patsubst %.c, %.o, ${SOURCES}) $(patsubst %.cc, %.o, ${SOURCES}) \
$(patsubst %.cpp, %.o, ${SOURCES}) $(patsubst %.cxx, %.o, ${SOURCES})
第二に、これは置換を実行しません。間違っているだけでなく、 で元のリストを取得しSOURCES
ます。
OBJECTS = $(patsubst %.c %.cc %.cpp %.cxx, %.o, ${SOURCES})
3 番目に、ソース ファイルの元のリストが生成されます。
OBJECTS = $(patsubst %.*, %.o, ${SOURCES})
また、ウサギのようにファイルを増やしているように見える以下を使用してみました:
OBJECTS = $(SOURCES:.c=.o) $(SOURCES:.cc=.o) \
$(SOURCES:.cpp=.o) $(SOURCES:.cxx=.o)
移植可能な make を使用する場合、拡張機能の単純な置換をどのように実行しますか?