【发布时间】:2010-10-03 08:48:52
【问题描述】:
我哪里错了;我想在命令行上为 g++ 定义一个预处理器值,但它失败了。下面是复制我的问题的示例代码:
[编辑] 我正在使用:
g++ (Debian 4.3.2-1.1) 4.3.2
GNU Make 3.81
测试.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。
【问题讨论】:
-
直接调用
g++ -DMY_DEFINED_VALUE x.cpp可以正常工作。 (打印 3)。 -
@KennyTM:这就是我在 Makefile 中所做的 - 这是否意味着我的 g++ 编译器已损坏(难以置信)。
-
或者可能是您的makefile 错误。你试过直接在命令行中做
g++ -DMY_DEFINED_VALUE test.cpp吗? -
@kennyTM:这很奇怪——如果我在没有 Makefile 的情况下运行它就可以了。那么问题就变成了:Makefile 出了什么问题?
-
尝试
make --debug=j查看make执行的实际命令。
标签: makefile g++ c-preprocessor