C++を学ぶ
Update 2024.12.25
C++を学ぶ
C++を学ぶ続編です。
VisualStudioを使った時のmake方法を知りたい。
ライブラリと、それを使う側のmake方法はどうなるのか。
MSBuildでのC++ライブラリとライブラリ利用側のビルド方法
Windows環境では、Visual Studioが提供するMSBuildを使うことで、
コマンドラインからソリューションやプロジェクトファイル(.sln
, .vcxproj
)をビルドできます。
ここでは、ライブラリをビルドするプロジェクト と、ライブラリを使う(呼び出す)プロジェクト を
1つのソリューションにまとめ、MSBuildで一括ビルドする流れを解説します。
1. プロジェクト構成イメージ
たとえば、下記のような構成を想定します:
- myLibrary.vcxproj:静的ライブラリやDLLをビルドするプロジェクト
- myApp.vcxproj:実行ファイル(EXE)をビルドするプロジェクト
- mySolution.sln:上記2つのプロジェクトを含むソリューションファイル
ライブラリ側プロジェクト(myLibrary
)は、
myLibrary.h
/ myLibrary.cpp
などをビルドして
myLibrary.lib
(静的ライブラリ)あるいは myLibrary.dll
(動的ライブラリ)を生成します。
アプリ側プロジェクト(myApp
)は、コンソールアプリなどとして
myLibrary
の関数を呼び出し、最終的に myApp.exe
を生成します。
2. ソリューションとプロジェクトの作成
Visual StudioのGUIで「新しいソリューション」を作成し、その中に 「静的ライブラリプロジェクト(または動的ライブラリプロジェクト)」 と 「コンソールアプリ(またはその他のEXEプロジェクト)」 を追加して構成できます。 ここでは例として「静的ライブラリ」を作成する流れを想定します。
// myLibrary.h (例)
#pragma once
int add(int a, int b);
// myLibrary.cpp (例)
#include "myLibrary.h"
int add(int a, int b) {
return a + b;
}
上記ソースを含む「myLibrary」プロジェクトを「静的ライブラリ(.lib)」としてビルドする設定にします。
// myApp.cpp (例)
#include
#include "myLibrary.h"
int main() {
int result = add(3, 5);
std::cout << "3 + 5 = " << result << std::endl;
return 0;
}
「myApp」プロジェクトはコンソールアプリとして設定し、myLibrary.lib
をリンク参照するように
「プロジェクトのプロパティ」 - 「リンカー」 - 「追加の依存ファイル」で指定します。
3. 依存関係の設定 (プロジェクト参照)
ソリューションエクスプローラで「myApp」プロジェクトを右クリックし、 「プロジェクト依存関係」や「参照」などを設定することで、 myAppはmyLibraryに依存 していることを登録できます。 これにより、myLibraryがビルドされた後にmyAppがビルドされるようになります。
4. MSBuildでのビルドコマンド
ソリューション(mySolution.sln
)ができあがったら、Developer Command Prompt for Visual Studio や
任意のコマンドプロンプトから msbuild
を使ってビルドできます。
msbuild mySolution.sln /t:Build /p:Configuration=Release
これにより、myLibrary.vcxproj
で myLibrary.lib
がビルドされ、
続いて myApp.vcxproj
で myApp.exe
がビルドされます(依存関係が正しく設定されていれば)。
-
/t:Build
:ターゲットを指定(通常はBuild
,Rebuild
,Clean
などを指定) -
/p:Configuration=Release
:Releaseビルドを指定(Debugビルドなら/p:Configuration=Debug
) -
/p:Platform=x64
:64bitビルドを行いたい場合(Win32
ビルドなら省略などプロジェクト設定に応じる)
5. ライブラリの種類を切り替えたい場合
プロジェクトのプロパティで「構成の種類 (Configuration Type)」を
「Static Library (.lib)」→「Dynamic Library (.dll)」に変更すれば、動的ライブラリをビルドできます。
ただし、その場合、アプリ側では myLibrary.dll
と対応する myLibrary.lib
(インポートライブラリ)をリンクするように設定してください。
6. MSBuildを使ったクリーンとリビルド
msbuild
コマンドは、ターゲットに Clean
や Rebuild
を指定することもできます。
msbuild mySolution.sln /t:Clean /p:Configuration=Release
msbuild mySolution.sln /t:Rebuild /p:Configuration=Release
Rebuild
は Clean → Build の流れを一度に実行します。
7. まとめ
- Visual Studio GUIで「ライブラリプロジェクト」と「アプリケーションプロジェクト」を作成し、同じソリューションにまとめる
- アプリ側がライブラリ側にプロジェクト参照を設定することで、依存関係を明確に
- コマンドラインからは
msbuild mySolution.sln /t:Build /p:Configuration=<...>
でビルド - ライブラリの種類(静的 <code>.lib</code> / 動的 <code>.dll</code>)はプロジェクト構成で切り替える
/t:Clean
,/t:Rebuild
などを併用すればクリーンや再ビルドも容易
MSBuildはVisual Studioのプロジェクト・ソリューションをコマンドラインで扱うための強力な仕組みです。GUI操作と併せて活用すれば、継続的インテグレーション環境(CIツール)でも活用できるので、ぜひ試してみてください。
とのことでした。続く。
広告
© 2024 Kenslog.com. All Rights Reserved.