2014-10-27 56 views
0

我似乎有一个问题让我的makefile正确构建我的C++文件。我的makefile代码如下所示;我正在编译的文件名为“avl.cc”(它正在工作并正确编译)。Makefile使用C++代替g ++ - 为什么?

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

all: $(PROGS) 

[email protected]: 
    $(CC) $(CFLAGS) [email protected] [email protected] 

.PHONY: clean 
clean: 
    rm $(PROGS) 

然而,当我输入命令makemake all,我得到

c++  avl.cc -o avl 

和调试符号我想从-g标志不上来。一个类似的makefile(只更改PROGS变量)为类似的项目工作,所以我不知道我做错了什么。有没有人有任何提示?谢谢!

+2

运行'make -p'。你需要'CXX = g ++'和'CXXFLAGS = -Wall -g -O2';也可以用'remake'作为'remake -x'和(如果你的GNU'make'已经足够近了)'make --trace' – 2014-10-27 16:54:33

+1

你期待'$ @:'作为你要做的目标吗?因为你所期待的不是这样。该变量在make处理中不存在。 – 2014-10-27 16:54:51

回答

1

您没有“avl”的目标,因此请使用默认规则。

尝试改变的makefile这样:

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

all: $(PROGS) 

$(PROGS): 
    $(CC) $(CFLAGS) -o [email protected] [email protected] 

.PHONY: clean 
clean: 
    rm $(PROGS) 
1

Makefile documentation about automatic variables

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

所以你不能使用[email protected]作为一项规则,这意味着Makefile文件的默认C++编译规则使用,因为你没有使用好的变量名,它们也将被忽略。

替代CC通过CXXCFLAGS通过CXXFLAGS对于C++。