Определения препроцессора 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 ответов

Другие вопросы по тегам