У меня было довольно много статей о переполнении стека, которые отвечали на вопрос "Как передать определения препроцессора компилятору из командной строки MSBuild", и все они ответили некоторым изменением:
MSBuild.exe /p:DefineConstants=THING_TO_BE_DEFINED
Я пробовал все варианты, которые я мог бы придумать:
MSBuild.exe "/p:DefineConstants=THING_TO_BE_DEFINED"
MSBuild.exe /p:DefineConstants="THING_TO_BE_DEFINED"
MSBuild.exe "/p:DefineConstants=THING_TO_BE_DEFINED=1"
MSBuild.exe /p:DefineConstants="THING_TO_BE_DEFINED=1"
... и десятки других. Я также флиртовал с переопределением PreprocessorDefinitions аналогичным образом. Все они вызвали #error ниже:
#include "stdafx.h"
#if !defined(THING_TO_BE_DEFINED)
#error "THING_TO_BE_DEFINED is not defined"
#endif
int _tmain(int argc, _TCHAR* argv[])
{
return 0;
}
Я пробовал это с помощью простого приложения из командной строки выше, а также с огромным игровым проектом, который у меня есть. Я могу только догадываться, что Visual Studio (я вижу это с 2005 и 2008 годами) имеет некоторые значения по умолчанию, установленные в глубине, что препятствует применению аргумента командной строки, но я не нашел доказательств, подтверждающих эту гипотезу.
Любые идеи о том, как я могу заставить это работать? Почему во имя FSM они не придерживались хорошего ol '-D THING_TO_BE_DEFINED?