我哪里错了;我想在命令行上为g ++定义一个预处理器值,但它失败了。下面是复制我的问题的示例代码:
[edit]我正在使用:
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;
}
生成文件
#=====
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)
如果我取消注释test.cpp中的#define
,一切都很好(打印5)。如果我发表评论,我会得到#error
。
答案 0 :(得分:6)
问题出在你的Makefile中。 %.o: %.c
规则与.cpp文件不匹配,因此会触发GNU Make的内置%.o: %.cpp
规则。
如果您将%.o: %.c
更改为%.o: %.cpp
,则会正常运行。