我有一个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)
Run Code Online (Sandbox Code Playgroud)
当我将编译器从g ++改为类似/ usr/local/bin/g ++ 46时,它仍然用g ++编译(确切地说是/ usr/bin/g ++).为什么?
PS欢迎对模板提出任何批评.我对gnu make不太满意; 我只是挤在网上搜索了一天,想出了这个.
您没有为如何构建目标文件指定自己的规则,因此Make使用默认的隐式规则,即:
$(CXX) $(CPPFLAGS) $(CXXFLAGS) -c
Run Code Online (Sandbox Code Playgroud)
注意$(CXX),不是$(CC),它指定了默认的C编译器.
| 归档时间: |
|
| 查看次数: |
4345 次 |
| 最近记录: |