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

发布于 2024-11-16 05:14:43 字数 230 浏览 3 评论 0原文

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

警告 C4005:“DEBUG_OUTPUT”:宏重新定义

When I compile my CUDA code with NVCC and I have already defined a preprocessing variable in the code, e.g. #define DEBUG_OUTPUT 0, is there a way to overwrite such a variable on the fly when compiling? I tried so specify the NVCC option -DDEBUG_OUTPUT=1 but this doesn't work: It gives me:

warning C4005: 'DEBUG_OUTPUT': Macro-Redefinition

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

凌乱心跳 2024-11-23 05:14:43

无论您在 -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++ 中。

Whatever you specify after -D, it gets defined before processing the input files. However, it does not remove the definitions that occur in the file. So, if you write -DDEBUG_OUTPUT but then you have #define DEBUG_OUTPUT in the file, the latter is a redefinition of the former. To handle that case, you can write in the file:

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

Note, it has actually nothing to do with nvcc. Same behaviour appears in C/C++.

回眸一笑 2024-11-23 05:14:43

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

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

If a preprocessor macro is already defined and you are sure that you don't need whatever it was originally, just redefine it conditionally:

#ifdef MYMACRO
#  undef MYMACRO
#endif
#define MYMACRO my macro content
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文