Я прочитал довольно много статей о переполнении стека, которые отвечали на вопрос «Как мне передать определения препроцессора компилятору из командной строки 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, они не остановились на старом добром -D THING_TO_BE_DEFINED?