cl.exe预处理器定义不是设置值

时间:2016-02-24 00:25:12

标签: c++ preprocessor-directive cl

总之,我尝试使用cl.exe从命令行编译一些c ++代码。在您提出要求之前,这个想法实际上是从另一个程序调用此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命令时,它会正确编译,但我得到了"错误:VALUES EMPTY!"每次。我无法弄清楚定义为什么没有经过。

0 个答案:

没有答案