我在使用-std=c++0x
g++ 4.4.7 编译我的 C++ 代码时使用该选项,因为有一些代码如下:
typedef enum Qualifier {AUTO, CONST, REG, STATIC, VOLATILE} Qualifier;
...
Qualifier q = Qualifier::AUTO;
我可以使用带有此选项的 g++ 来编译我的源文件。但是当我将 g++ 命令放入我的 makefile 中时,它不起作用!GNU make 在执行 g++ 命令时会忽略此选项(它也会忽略 .o 文件的输出文件夹并将它们放在当前文件夹中)!
我的 GNU make 的版本是 3.81,我的 makefile 的一部分是:
VPATH = src:obj
all : CCompiler
CCompiler : main.o CodeGenerator.o FileWraper.o ir.tab.o \
lex.ir.o lex.yy.o Symbol.o SymbolTable.o yacc.tab.o
g++ -std=c++0x -o bin/CCompiler obj/*.o
main.o : src/main.cpp \
src/FileWraper.h src/Log.h src/SymbolTable.h src/Symbol.h src/CodeGenerator.h
g++ -std=c++0x -c -o ./obj/main.o src/main.cpp
CodeGenerator.o : src/CodeGenerator.cpp \
src/CodeGenerator.h src/Symbol.h src/SymbolTable.h
g++ -std=c++0x -c -o ./obj/CodeGenerator.o src/CodeGenerator.cpp
我的项目目录是这样组织的:
CCompiler/
Makefile
src/
bin/
obj/
当我执行 make 时,shell 向我显示了这个:
[root@cn CCompiler]$ make
g++ -c -o main.o src/main.cpp
In file included from src/SymbolTable.h:6,
from src/main.cpp:4:
src/Symbol.h:112: error: ‘Qualifier’ is not a class or namespace
make: *** [main.o] Error 1
为什么会这样,我该如何解决?
非常感谢!