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

时间:2011-06-19 21:11:25

标签: cuda c-preprocessor nvcc

当我使用NVCC编译我的CUDA代码时,我已经在代码中定义了一个预处理变量,例如#define DEBUG_OUTPUT 0,有没有办法在编译时动态覆盖这样的变量?我试过这样指定NVCC选项-DDEBUG_OUTPUT=1但这不起作用:它给了我:

  

警告C4005:'DEBUG_OUTPUT':宏重新定义

2 个答案:

答案 0 :(得分:4)

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

//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 ++中出现相同的行为。

答案 1 :(得分:1)

如果已经定义了预处理器宏并且您确定不需要它原来的任何内容,那么只需要有条件地重新定义它:

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