我似乎在让makefile正确构建我的C ++文件时出现问题。我的makefile代码如下;我试图编译的文件名为“avl.cc”(正在工作并正确编译)。
CC=g++
CFLAGS=-g -O2
PROGS=avl
all: $(PROGS)
$@:
$(CC) $(CFLAGS) $@ $@.cc
.PHONY: clean
clean:
rm $(PROGS)
但是,当我输入命令make
或make all
时,我得到了
c++ avl.cc -o avl
我想从-g
标志出来的调试符号没有出现。一个类似的makefile(只更改PROGS
变量)适用于类似的项目,所以我不确定我做错了什么。有人有任何提示吗?谢谢!
答案 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 ++。