NVCC を使用して CUDA コードをコンパイルし、コード内で既に前処理変数を定義している場合、たとえば#define DEBUG_OUTPUT 0
、コンパイル時にそのような変数をオンザフライで上書きする方法はありますか? NVCCオプションを指定しようとしまし-DDEBUG_OUTPUT=1
たが、これは機能しません:それは私に与えます:
警告 C4005: 'DEBUG_OUTPUT': マクロの再定義
NVCC を使用して CUDA コードをコンパイルし、コード内で既に前処理変数を定義している場合、たとえば#define DEBUG_OUTPUT 0
、コンパイル時にそのような変数をオンザフライで上書きする方法はありますか? NVCCオプションを指定しようとしまし-DDEBUG_OUTPUT=1
たが、これは機能しません:それは私に与えます:
警告 C4005: 'DEBUG_OUTPUT': マクロの再定義
-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++ でも同じ動作が見られます。
プリプロセッサ マクロが既に定義されていて、元のマクロが不要であることが確実な場合は、条件付きで再定義してください。
#ifdef MYMACRO
# undef MYMACRO
#endif
#define MYMACRO my macro content