将预处理变量传递给NVCC以编译CUDA?

将预处理变量传递给NVCC以编译CUDA?,cuda,c-preprocessor,nvcc,Cuda,C Preprocessor,Nvcc,当我使用NVCC编译CUDA代码时,并且我已经在代码中定义了预处理变量,例如#define DEBUG_OUTPUT 0,是否有方法在编译时动态覆盖此类变量?我尝试指定NVCC选项-DDEBUG\u OUTPUT=1,但这不起作用:它给了我: 警告C4005:“调试输出”:宏重新定义 如果已经定义了预处理器宏,并且您确信不需要它最初是什么,只需有条件地重新定义它: #ifdef MYMACRO # undef MYMACRO #endif #define MYMACRO my macro co

当我使用NVCC编译CUDA代码时,并且我已经在代码中定义了预处理变量,例如
#define DEBUG_OUTPUT 0
,是否有方法在编译时动态覆盖此类变量?我尝试指定NVCC选项
-DDEBUG\u OUTPUT=1
,但这不起作用:它给了我:

警告C4005:“调试输出”:宏重新定义


如果已经定义了预处理器宏,并且您确信不需要它最初是什么,只需有条件地重新定义它:

#ifdef MYMACRO
#  undef MYMACRO
#endif
#define MYMACRO my macro content

如果已经定义了预处理器宏,并且您确信不需要它最初是什么,只需有条件地重新定义它:

#ifdef MYMACRO
#  undef MYMACRO
#endif
#define MYMACRO my macro content

无论在-D之后指定什么,它都是在处理输入文件之前定义的。但是,它不会删除文件中出现的定义。因此,如果您编写
-DDEBUG_输出
,但文件中有
#define DEBUG_输出
,则后者是前者的重新定义。要处理这种情况,可以在文件中写入:

//if not specified earlier (e.g. by -D parameter)
#ifndef DEBUG_OUTPUT
//set it now to some default value
#define DEBUG_OUTPUT 0
#endif

注意,它实际上与nvcc无关。在C/C++中也会出现相同的行为。

无论在-D之后指定什么,它都是在处理输入文件之前定义的。但是,它不会删除文件中出现的定义。因此,如果您编写
-DDEBUG_输出
,但文件中有
#define DEBUG_输出
,则后者是前者的重新定义。要处理这种情况,可以在文件中写入:

//if not specified earlier (e.g. by -D parameter)
#ifndef DEBUG_OUTPUT
//set it now to some default value
#define DEBUG_OUTPUT 0
#endif

注意,它实际上与nvcc无关。C/C++中也会出现相同的行为。

好的,谢谢!如何指定多个变量的值,而不仅仅是定义它?类似于
-DSOME\u VAR=1000,OTHER\u VAR=2000
?编辑:通过测试得出,它是
-DSOME\u VAR=1000-DOTHER\u VAR=2000
。好的,谢谢!如何指定多个变量的值,而不仅仅是定义它?类似于
-DSOME\u VAR=1000,OTHER\u VAR=2000
?编辑:通过测试得出,它是
-DSOME\u VAR=1000-DOTHER\u VAR=2000