当我使用NVCC编译我的CUDA代码时,我已经在代码中定义了一个预处理变量,例如#define DEBUG_OUTPUT 0
,有没有办法在编译时动态覆盖这样的变量?我试过这样指定NVCC选项-DDEBUG_OUTPUT=1
但这不起作用:它给了我:
警告C4005:'DEBUG_OUTPUT':宏重新定义
答案 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