我有一些共享许多常用代码的项目,但有时我需要根据项目不包含公共代码的某些部分。
我尝试创建一个名为project_names.hh的单独文件,其中包含:
// list of project names
#define FIRSTPROJECT 0
#define SECONDPROJECT 1
// PROJECT_NAME must be set to one of the above names in the project's main.cc file
#define PROJECT_NAME
然后在其中一个项目的主文件中我这样做:
#define PROJECT_NAME FIRSTPROJECT
问题是即使我在另一个文件中包含project_names.hh,我也似乎无法编译这个语句:
#if PROJECT_NAME == FIRSTPROJECT
我收到此错误:
错误:运算符'=='没有左操作数
有没有人有这么好的方法呢?
谢谢!
马龙
答案 0 :(得分:2)
那是因为您已将PROJECT_NAME
定义为带有您的行的空字符串
#define PROJECT_NAME
您想将其更改为
#define PROJECT_NAME FIRSTPROJECT
这需要在头文件中,该项目的所有文件都包含#include。
或者,你可以摆脱#define PROJECT_NAME
而不是使用
对于该项目中的所有文件,在编译器命令行上-DPROJECT_NAME=FIRSTPROJECT
。请注意,如果在多个项目中使用相同的文件,您需要使用不同的选项多次编译它,并将输出放在不同的位置...
答案 1 :(得分:0)
如果我处于你的情况,我只需定义FIRSTPROJECT或SECONDPROJECT,而不是将PROJECT_NAME设置为其中任何一个值。然后我会使用#ifdef
来检查是否设置了该值。
答案 2 :(得分:0)
而不是#define PROJECT_NAME FIRSTPROJECT
,
使用#define FIRSTPROJECT
,
然后用#ifdef FIRSTPROJECT
答案 3 :(得分:0)
您应该在运行#if PROJECT_NAME == FIRSTPROJECT
的文件中包含project_names.hh。预处理器可能没有首先加载并执行语句设置PROJCET_NAME
。
答案 4 :(得分:0)
这很可能是因为没有设置PROJECT_NAME。您应该检查正在编译的文件,并检查是否在那里设置了#define。
将define设置为整个构建过程的编译器选项可能会有所帮助。对于我所知道的大多数编译器(gcc,MSVC,clang,xlC),编译器选项将是
-DPROJECT_NAME=FIRSTPROJECT