【问题标题】:specifying the compiler in a gnu makefile在 gnu makefile 中指定编译器
【发布时间】: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,以供遇到此问题的任何人使用。

标签: makefile gnu-make


【解决方案1】:

您还没有为如何构建目标文件指定自己的规则,因此 Make 使用 the default implicit rule,即:

$(CXX) $(CPPFLAGS) $(CXXFLAGS) -c

注意$(CXX),而不是$(CC),它指定了默认的C编译器。

【讨论】:

  • 详细说明一下,CC 应该指向某个版本的gcc 或其他C 编译器,而CXX 应该是某个版本的@987654328 @ 或其他 C++ 编译器。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-02-26
  • 1970-01-01
  • 1970-01-01
  • 2011-12-29
  • 2017-01-19
  • 1970-01-01
相关资源
最近更新 更多