2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

cl.exe による Win32 アプリのビルドについて

Posted at

概要

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
から引用したソースコードをメモ帳に書き写す。

test1.c
    #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旧にたくさん例示があるのでいろいろ試してみてください。

最後に

環境構築の段階で間違ってしまっていると、当然ビルドが通りません。
今回の場合は、ビルドコマンドを打った時に、ライブラリをリンクしていないとドはまりするので、ご注意ください。

2
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?