概要
Visual Studio Community をインストールすると、コマンドラインから C/C++ のWin32アプリをビルドすることができます。いちいちプロジェクトを作ってからコードを試すことがなく、手軽に導入できるので、ちょっと試してみたいときに有効です。手順もそれほど複雑ではないので、覚えてしまいましょう。
テスト環境
・Windows11 Pro 64bit
・Visual Studio 2022 Community
パスを通す
環境変数に以下のパスを追加する
C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.38.33130\bin\Hostx64\x64
cl.exe を打ってみる
Deveoper Command Prompt for VS 2022 を起動したら、
cl.exe と打ってみる
C:\Program Files\Microsoft Visual Studio\2022\Community>cl
Microsoft(R) C/C++ Optimizing Compiler Version 19.38.33133 for x64
Copyright (C) Microsoft Corporation. All rights reserved.
使い方: cl [ オプション... ] ファイル名... [ /link リンク オプション... ]
と出てきたらOK !
Win32アプリをビルドする
https://wisdom.sakura.ne.jp/system/winapi/win32/win5.html
から引用したソースコードをメモ帳に書き写す。
#include<windows.h>
int WINAPI WinMain(
HINSTANCE hInstance ,
HINSTANCE hPrevInstance ,
PSTR lpCmdLine ,
int nCmdShow ) {
MessageBox(NULL , TEXT("Kitty on your lap") , TEXT("メッセージボックス") , MB_OK);
return 0;
}
Deveoper Command Prompt for VS 2022 から、コマンドを打ちますが、user32.lib と kernel32.lib、 GUIツールを使うときは、 gdi32.lib をリンクしてください。
これがないとリンクエラーが出ます。
(失敗例)
D:\win32\test1\cl.exe test1.c
Microsoft(R) C/C++ Optimizing Compiler Version 19.38.33133 for x64
Copyright (C) Microsoft Corporation. All rights reserved.
test1.c
test1.c(1): warning C4819: ファイルは、現在のコード ページ (932) で表示できない文字を含んでいます。データの損失を防ぐた めに、ファイルを Unicode 形式で保存してください。
Microsoft (R) Incremental Linker Version 14.38.33133.0
Copyright (C) Microsoft Corporation. All rights reserved.
/out:test1.exe
test1.obj
test1.obj : error LNK2019: 未解決の外部シンボル __imp_MessageBoxA が関数 WinMain で参照されました
test1.exe : fatal error LNK1120: 1 件の未解決の外部参照
(成功例)
D:\win32\test1\cl.exe test1.c user32.lib kernel32.lib
Microsoft(R) C/C++ Optimizing Compiler Version 19.38.33133 for x64
Copyright (C) Microsoft Corporation. All rights reserved.
test1.c
test1.c(1): warning C4819: ファイルは、現在のコード ページ (932) で表示できない文字を含んでいます。データの損失を防ぐた めに、ファイルを Unicode 形式で保存してください。
Microsoft (R) Incremental Linker Version 14.38.33133.0
Copyright (C) Microsoft Corporation. All rights reserved.
/out:test1.exe
test1.obj
user32.lib
Wisdomsoft旧にたくさん例示があるのでいろいろ試してみてください。
最後に
環境構築の段階で間違ってしまっていると、当然ビルドが通りません。
今回の場合は、ビルドコマンドを打った時に、ライブラリをリンクしていないとドはまりするので、ご注意ください。