うまく機能する gnu makefile テンプレートがありますが、パスの最初の g++ 以外のコンパイラを指定しようとすると失敗します。
これがテンプレートです。
CXX = g++
CXXFLAGS = $(INC) $(LIB) -Wall
INC = -I./ -I/usr/local/include
LIB = -L/usr/local/lib
SRCS = \
blah1.cpp
blah2.cpp
OBJS = $(SRCS:.cpp=.o)
DEPS = $(SRCS:.cpp=.d)
PROG = myprog
$(PROG): $(OBJS)
$(CXX) $(CXXFLAGS) -o $@ $(OBJS)
%.d: %.cpp
@set -e; rm -f $@; \
$(CXX) -MM $(CXXFLAGS) $< > $@.$$$$; \
sed 's,\($*\)\.o[ :]*,\1.o $@ : ,g' < $@.$$$$ > $@; \
rm -f $@.$$$$
debug: CXXFLAGS += -O0 -DDEBUG -ggdb
debug: $(PROG)
-include $(DEPS)
.PHONY: clean
clean:
rm -f $(DEPS) $(OBJS) $(PROG)
コンパイラを g++ から /usr/local/bin/g++46 のようなものに変更しても、g++ (正確には /usr/bin/g++) でコンパイルされます。なんで?
PS テンプレートに関する批判は大歓迎です。私は gnu make にあまり慣れていません。これを思いつくために、ウェブを1日詰め込んで検索しました。