Makefile使用c ++而不是g ++ - 为什么?

时间:2014-10-27 16:47:59

标签: c++ makefile

我似乎在让makefile正确构建我的C ++文件时出现问题。我的makefile代码如下;我试图编译的文件名为“avl.cc”(正在工作并正确编译)。

CC=g++
CFLAGS=-g -O2
PROGS=avl

all: $(PROGS)

$@:
    $(CC) $(CFLAGS) $@ $@.cc

.PHONY: clean
clean:
    rm $(PROGS)

但是,当我输入命令makemake all时,我得到了

c++     avl.cc   -o avl

我想从-g标志出来的调试符号没有出现。一个类似的makefile(只更改PROGS变量)适用于类似的项目,所以我不确定我做错了什么。有人有任何提示吗?谢谢!

2 个答案:

答案 0 :(得分:1)

您没有'avl'的目标,因此make使用默认规则。

尝试将makefile更改为:

CC=g++
CFLAGS=-g -O2
PROGS=avl

all: $(PROGS)

$(PROGS):
    $(CC) $(CFLAGS) -o $@ $@.cc

.PHONY: clean
clean:
    rm $(PROGS)

答案 1 :(得分:1)

来自Makefile documentation about automatic variables

  

您认识到有限的范围非常重要   自动变量值可用:它们只有值   食谱。特别是,你不能在任何地方使用它们   目标列表;他们没有价值,并将扩展到   空字符串。

所以你不能使用$@作为规则,这意味着使用了Makefile的默认c ++编译规则,因为你没有使用好的变量名,所以它们也被忽略了。

CC替换为CXX,将CFLAGS替换为CXXFLAGS c ++。