VS関連コンパイルコマンド

2455 ワード

作業ではコマンドラインでwindowsでCプログラムをコンパイルすることが多いが、MinGW(tdm 64-gcc)でも使いやすいが、Visual Studioでコンパイルされた静的ライブラリ*.libファイルに対してはgcc呼び出しが面倒であるため、ここではVisual Studioのコマンドラインツール、すなわちVisual Studio 2017生成ツール(ダウンロードアドレス)について検討した.ダウンロード後、直接インストールすることも、オフラインインストールパッケージをエクスポートしてオフラインインストールすることもできます.vs_buildtools.exe--layout E:downloadvsコマンドオフラインインストールパッケージをエクスポートします.サイズは10 Gです.具体的にはマイクロソフトの公式ドキュメントを参照してください.ここではよく使われる機能を例に挙げます.
環境構成のコンパイル
関連環境設定スクリプトはインストールパスVCAuxiliaryBuildにあります.
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
    
  • 第2ステップ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