Makefile使用C++代替g ++ - 为什么?
问题描述:
我似乎有一个问题让我的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)
然而,当我输入命令make
或make all
,我得到
c++ avl.cc -o avl
和调试符号我想从-g
标志不上来。一个类似的makefile(只更改PROGS
变量)为类似的项目工作,所以我不知道我做错了什么。有没有人有任何提示?谢谢!
答
您没有“avl”的目标,因此请使用默认规则。
尝试改变的makefile这样:
CC=g++
CFLAGS=-g -O2
PROGS=avl
all: $(PROGS)
$(PROGS):
$(CC) $(CFLAGS) -o [email protected] [email protected]
.PHONY: clean
clean:
rm $(PROGS)
答
从Makefile documentation about automatic variables:
到你所认识的范围有限,其中 自动变量值可用这是非常重要的:他们只有内的值 的食谱。特别是,您不能在规则的 目标列表中的任何地方使用它们;它们在那里没有价值,并且将扩展为空字符串 。
所以你不能使用[email protected]
作为一项规则,这意味着Makefile文件的默认C++编译规则使用,因为你没有使用好的变量名,它们也将被忽略。
替代CC
通过CXX
和CFLAGS
通过CXXFLAGS
对于C++。
运行'make -p'。你需要'CXX = g ++'和'CXXFLAGS = -Wall -g -O2';也可以用'remake'作为'remake -x'和(如果你的GNU'make'已经足够近了)'make --trace' – 2014-10-27 16:54:33
你期待'$ @:'作为你要做的目标吗?因为你所期待的不是这样。该变量在make处理中不存在。 – 2014-10-27 16:54:51