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.vcxprojmyLibrary.lib がビルドされ、
続いて myApp.vcxprojmyApp.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 コマンドは、ターゲットに CleanRebuild を指定することもできます。


msbuild mySolution.sln /t:Clean /p:Configuration=Release
msbuild mySolution.sln /t:Rebuild /p:Configuration=Release

RebuildClean → Build の流れを一度に実行します。

7. まとめ

  1. Visual Studio GUIで「ライブラリプロジェクト」と「アプリケーションプロジェクト」を作成し、同じソリューションにまとめる
  2. アプリ側がライブラリ側にプロジェクト参照を設定することで、依存関係を明確に
  3. コマンドラインからは msbuild mySolution.sln /t:Build /p:Configuration=<...> でビルド
  4. ライブラリの種類(静的 <code>.lib</code> / 動的 <code>.dll</code>)はプロジェクト構成で切り替える
  5. /t:Clean, /t:Rebuild などを併用すればクリーンや再ビルドも容易

MSBuildはVisual Studioのプロジェクト・ソリューションをコマンドラインで扱うための強力な仕組みです。GUI操作と併せて活用すれば、継続的インテグレーション環境(CIツール)でも活用できるので、ぜひ試してみてください。


とのことでした。続く。

広告

アフィリエイト広告のスペース