Определения препроцессора 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, она компилируется должным образом, но я получаю сообщение «ОШИБКА: ПУСТЫЕ ЗНАЧЕНИЯ!» каждый раз. Я не могу понять, почему определения не проходят.

0

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector