美文网首页
VS相关编译命令

VS相关编译命令

作者: gaosiyan | 来源:发表于2018-03-17 20:03 被阅读0次

      工作中经常用命令行在windows下编译C程序,MinGW(tdm64-gcc)用着也还比较顺手,但是对于Visual Studio编译出来的静态库*.lib文件,gcc调用起来比较麻烦,所以这里研究了一下Visual Studio的命令行工具,也就是Visual Studio 2017 生成工具(下载地址);下载后可以直接安装,也可以导出离线安装包进行离线安装,用vs_buildtools.exe --layout E:\download\vs命令导出离线安装包,大小10G.具体使用可以参见微软官方文档.这里对常用的功能进行举例.

    编译环境配置

    相关环境配置脚本位于安装路径\VC\Auxiliary\Build

    vcvars32.bat使用 32 位 x86 本机工具来生成 32 位 x86 代码;
    vcvars64.bat使用 64 位 x64 本机工具来生成 64 位 x64 代码;
    vcvarsx86_amd64.bat使用 32 位 x86 本机跨工具来生成 64 位 x64 代码;
    vcvarsamd64_x86.bat使用 64 位 x64 本机跨工具来生成 32 位 x86 代码;
    

    编译器CL.exe

    CL.exe 在成功(无错误)时返回零;否则返回非零值.
    编译链接HelloWorld.c,在默认的用户目录生成HelloWorld.obj和HelloWorld.exe

    CL E:\code\c_code\HelloWorld.c
    

    只编译不链接,输出HelloWorld .obj到默认的用户目录

    CL /c E:\code\c_code\HelloWorld.c
    

    几个重要编译器选项

    /D 相当于#define TEST,注意 /D和TEST之间没有空格,或者用:,也可以有  /DTEST=1
    CL /DTEST E:\code\c_code\HelloWorld.c
    
    /E预处理到标准输出stdout
    CL /E  E:\code\c_code\HelloWorld.c
    
    /P预处理到默认文件 HelloWorld .i
    CL /P  E:\code\c_code\HelloWorld.c
    
    /Fi预处理输出到对应位置,注意 /Fi和后面的路径之间没有空格,但是可以用冒号分开
    CL /P  E:\code\c_code\HelloWorld.c /FiE:\code\c_code\HelloWorld.i
    
    /Fo重命名obj文件,注意 /Fo和后面的路径之间没有空格 ,但是可以用冒号分开
    CL /c E:\code\c_code\HelloWorld.c /FoE:\code\c_code\HelloWorld.obj
    
    /Fo控制obj文件, /Fe控制exe文件
    CL E:\code\c_code\HelloWorld.c /FeE:\code\c_code\HelloWorld.exe
    
    /I 需要包含的目录
    
    /O1  1级优化
    
    /O2  2级优化,最高级别的优化,没有O3优化
    
    /Od  禁用优化
    

    链接器LINK.exe

    链接 HelloWorld.obj生成 HelloWorld.exe到默认目录

    LINK E:\code\c_code\HelloWorld.obj
    

    链接 HelloWorld.obj生成 HelloWorld.exe到对应目录

    LINK E:\code\c_code\HelloWorld.obj /out:E:\code\c_code\HelloWorld.exe
    

    库管理器LIB.exe

    LIB.exe主要用于生成.*.lib静态库.
    将HelloWorldLib.c编译成HelloWorldLib.lib,需要分为2步:

    • 第一步编译成HelloWorldLib.obj
    CL /c E:\code\c_code\HelloWorldLib.c /Fo: E:\code\c_code\HelloWorldLib.obj
    
    • 第二步生成HelloWorldLib.lib
    LIB E:\code\c_code\HelloWorldLib.obj /out:E:\code\c_code\HelloWorldLib.lib
    

    在链接过程中链接静态库

    LINK E:\code\c_code\HelloWorld.obj E:\code\c_code\HelloWorldLib.lib /out:E:\code\c_code\Hello.exe
    

    相关文章

      网友评论

          本文标题:VS相关编译命令

          本文链接:https://www.haomeiwen.com/subject/dgbjqftx.html