Передать переменную предварительной обработки в NVCC для компиляции CUDA? - PullRequest
1 голос
/ 20 июня 2011

Когда я компилирую свой код CUDA с помощью NVCC, и я уже определил переменную предварительной обработки в коде, например, #define DEBUG_OUTPUT 0, есть ли способ перезаписать такую ​​переменную на лету при компиляции?Я пытался указать опцию NVCC -DDEBUG_OUTPUT=1, но это не работает: выдает:

предупреждение C4005: 'DEBUG_OUTPUT': переопределение макроса

Ответы [ 2 ]

4 голосов
/ 20 июня 2011

Что бы вы ни указали после -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 голос
/ 20 июня 2011

Если макрос препроцессора уже определен и вы уверены, что вам не нужно то, чем он был изначально, просто переопределите его условно:

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