当前位置:  开发笔记 > 运维 > 正文

不在命令行上使用预处理程序值进行编译

如何解决《不在命令行上使用预处理程序值进行编译》经验,为你挑选了1个好方法。

我哪里错了; 我想在命令行上为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)

如果我取消注释#definetest.cpp,一切都很好(打印5).如果我评论它,我得到了#error.



1> Jander..:

问题出在你的Makefile中.该%.o: %.c规则与.cpp文件不匹配,因此%.o: %.cpp将触发GNU Make的内置规则.

如果更改%.o: %.c%.o: %.cpp,它会运行正常.

推荐阅读
地之南_816
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有