Определения препроцессора cl.exe не устанавливают значения
Таким образом, я пытаюсь скомпилировать некоторый код C++ из командной строки, используя cl.exe. Идея, прежде чем вы спросите, состоит в том, чтобы фактически вызвать эту команду cl.exe из другой программы, которая динамически определяет определения препроцессора для передачи в cl.exe. Кроме того, я работаю над распространяемым файлом cl.exe, поэтому есть все пути include и lib.
Вот команда cl.exe:
cl.exe /Zi /nologo /W3 /WX- /O2 /Oi /Oy- /GL /D:SERVER=\"{address}\" /D:PORT=\"{port}\" /D:PROTOCOL=\"{protocol}\" /D _UNICODE /D UNICODE /Gm- /EHsc /MT /GS- /Gy /fp:precise /Zc:wchar_t /Zc:forScope /Zc:inline /Fo:.\\Clients\\ /Fd:.\\Clients\\vc140.pdb /Gd /TP /analyze- /errorReport:prompt /I.\\src /I.\\Compiler\\include /I.\\Compiler\\include\\ucrt /I.\\Compiler\\include\\um /I.\\Compiler\\include\\shared .\\src\\*.cpp /link /ERRORREPORT:PROMPT /OUT:\".\\Clients\\{name}.exe\" /NOLOGO /LIBPATH:.\\Compiler\\lib /MANIFEST /manifest:embed /PDB:\".\\Clients\\{name}.pdb\" /OPT:REF /OPT:ICF /LTCG:incremental /TLBID:1 /DYNAMICBASE /NXCOMPAT /IMPLIB:\".\\Clients\\{name}.lib\" /MACHINE:X86 /SAFESEH /NODEFAULTLIB:msvcrt
Важная часть в самом начале:
cl.exe ... /D:SERVER=\"{address}\" /D:PORT=\"{port}\" /D:PROTOCOL=\"{protocol}\"
Это определения, которые я пытаюсь передать в свою программу, где значения в скобках будут определены в другой моей программе. Размещение произвольных значений, таких как "192.168.1.2", "4444" и "TCP", в командной строке для проверки этого дает тот же результат, что и моя программа, так что это не проблема.
Вот фрагмент из моего кода C++, пытающийся определить переменные на основе этих определений:
int main()
{
std::string srv = "";
std::string prt = "";
std::string pro = "";
#ifdef SERVER
srv = SERVER;
#endif
#ifdef PORT
prt = PORT;
#endif
#ifdef PROTOCOL
pro = PROTOCOL;
#endif
if (srv == "" || prt == "" || pro == "") {
printf("ERROR: VALUES EMPTY!\n");
system("pause");
return 11;
}
//For fun...
printf("Server: %s\nPort: %s\nProtocol: %s\n", srv.c_str(), prt.c_str(), pro.c_str());
return 0;
}
Когда я выполняю команду cl.exe, она компилируется должным образом, но я получаю сообщение "ОШИБКА: ПУСТЫЕ ЗНАЧЕНИЯ!" каждый раз. Я не могу понять, почему определения не проходят.