我哪里错了; 我想在命令行上为g ++定义一个预处理器值,但它失败了.下面是复制我的问题的示例代码:
[编辑]我正在使用:
g ++(Debian 4.3.2-1.1)4.3.2
GNU Make 3.81
test.h
#ifndef _test_h_ #define _test_h_ #include "iostream" #if defined(MY_DEFINED_VALUE) #if (MY_DEFINED_VALUE != 5) #undef MY_DEFINED_VALUE #define MY_DEFINED_VALUE 3 #endif //(MY_DEFINED_VALUE != 5) #else //defined(MY_DEFINED_VALUE) #error Error - MY_DEFINED_VALUE is not defined #endif //defined(MY_DEFINED_VALUE) class test { public: int val; test() {} void show() { std::cout << "val = " << val << "\n"; } }; #endif //_test_h_
TEST.CPP
//#define MY_DEFINED_VALUE 5 #include "test.h" int main() { test t; t.val = MY_DEFINED_VALUE; t.show(); return 0; }
Makefile文件
#===== CC = g++ LD = g++ USERDEFINES = -DMY_DEFINED_VALUE CFLAGS = -Wall LDFLAGS = RM = /bin/rm -f SRCS = test.cpp OBJS = test.o PROG = test #===== $(PROG): $(OBJS) $(LD) $(LDFLAGS) $(OBJS) -o $(PROG) #===== %.o: %.c $(CC) $(USERDEFINES) $(CFLAGS) -c $< #===== clean: $(RM) $(PROG) $(OBJS)
如果我取消注释#define
test.cpp,一切都很好(打印5).如果我评论它,我得到了#error
.
问题出在你的Makefile中.该%.o: %.c
规则与.cpp文件不匹配,因此%.o: %.cpp
将触发GNU Make的内置规则.
如果更改%.o: %.c
到%.o: %.cpp
,它会运行正常.