【发布时间】:2012-06-26 17:06:10
【问题描述】:
我有一个很好用的 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++)。为什么?
附:欢迎对模板提出任何批评。我对 gnu make 不太满意;我只是在网上搜索了一天才想出这个。
【问题讨论】:
-
我在上面的模板中将 CC 更改为 CXX,以供遇到此问题的任何人使用。