Я прочитал довольно много статей о переполнении стека, в которых был дан ответ на вопрос «Как передать определения препроцессора в компилятор из командной строки 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 годах) имеет в своем недрах некий набор по умолчанию, который препятствует применению моего аргумента командной строки, но я не нашел доказательств в поддержку этой гипотезы. 1010 *
Любые идеи о том, как я могу заставить это работать? Почему во имя FSM они не придерживались доброго прошлого THD_TO_BE_DEFINED?