C++サンプルプログラムをVisualStudio2019の新規プロジェクトで始める手順
前回、Google OR-ToolsをVisual Studio 2019でソースコードからビルドしました。今回はその成果物であるortools.libを利用する手順を簡単にまとめます。
既に、OR-ToolsはPCにインストール済みであることを前提としています。
新規プロジェクト作成手順にフォーカスするため、サンプルコードは、本家のサンプルを写経します。
これをprogram1.cppとして任意の場所に保存します。今回は、C:/orsample
の下に置いたとします。
cd C:/orsample
└── program1.cpp
CMakeLists.txtを準備する
Visual Studio 2019のプロジェクトを作成するため、CMakeの find_package()
を利用すると簡単です。
プロジェクト名を prog
として以下の様な記述としました。CMakeLists.txtの細かい記述方法についてはここでは割愛します。
cmake_minimum_required(VERSION 3.8.2)
project(prog VERSION 1.0.0 LANGUAGES CXX)
include(CTest)
find_package(ortools CONFIG REQUIRED)
add_executable(${PROJECT_NAME} program1.cpp)
target_compile_features(${PROJECT_NAME} PUBLIC cxx_std_11)
set_target_properties(${PROJECT_NAME} PROPERTIES VERSION ${PROJECT_VERSION})
target_link_libraries(${PROJECT_NAME} PRIVATE ortools::ortools)
ここまでで以下の様な構成です。
cd C:/orsample
├── CMakeLists.txt
└── program1.cpp
プロジェクトファイルの生成
上記の作成したCMakeLists.txtを利用してVisualStudio2019のソリューションファイルを生成します。以下の手順です。開発用ですのでデバッグタイプの構成で生成させます。
mkdir build
cd build
cmake -DCMAKE_BUILD_TYPE=Debug ..
私の環境では、上記コマンドで以下の様なメッセージがでました。これはgflags::gflags_staticが正しく設定できなかったようです。
CMake Error at CMakeLists.txt:7 (add_executable):
Target "prog" links to target "gflags::gflags_static" but the target was
not found. Perhaps a find_package() call is missing for an IMPORTED
target, or an ALIAS target is missing?
デバックタイプのプロジェクト生成なので、gflags_static_debug.libのハズなので、先に進めて手動で手直しすることにします。
slnファイルのビルド
上記の生成後、以下の様な構成です。
cd C:/orsample
├── CMakeLists.txt
├── program1.cpp
└── build/
├─ ALL_BUILD.vcxproj.user
├─ ...
├─ prog.sln
├─ ...
└── CMakeCache.txt
ここで、 prog.sln
をVisual Studio 2019 で開きます。その後、CMakeでリンク設定できていない箇所を手動で修正します。ソリューションエクスプローラーから prog
→ プロパティ
→ リンカー
→ 入力
を開き、 [追加の依存ファイル]
を編集し gflags::gflags_static
を削除して、以下のlibをリンクするように設定します。他の設定は生成したプロジェクトのままでビルドできました。C:\tools\or-tools\build\dependencies\install\lib\
部分については、私のor-toolsをビルドしたパスに依存しています。各自環境に読み替えてください。
C:\tools\or-tools\build\dependencies\install\lib\gflags_static_debug.lib
shlwapi.lib
テスト実行
VisualStudio2019の [デバッグ]
⇒ [デバッグの開始]
メニューからデバッグ実行もできました。コンソールに Objective value = 4やx=1,y=1の実行結果も表示されました。もちろんブレークポイントも正しく止まります。
おわりに
正しい手順かどうかは不明ですが、自分の環境でGoogle OR-Toolsを利用した新規プロジェクトの簡単な作成手順が確認できました。手修正が1ステップ残りましたが、おいおい、対応していくことにします。
参照元
次回
次回はいよいよ制約プログラミングの第一歩に入りたいと思います。