はじめに
この記事では、Ubuntu環境で実装していたC++のCMake環境をWindows環境で再現するための内容です。
ソースコードの記述はVScodeで、CMakeを利用したビルド手順を記します。
Ubuntuと違って、コンパイラの指定や、PATHの管理など、使い勝手が難しく、ライブラリ管理も手こずったので、かなり大変でしたね...
前提知識
この記事は、Ubuntu内でのターミナルでC++をコンパイルし、実行ファイルをビルドできていた人向けです。(まあ別にWindowsしか使っていない人でもできるけども...)
内容の引継ぎであったり、再現の問題でWindows環境に導入しなければならない人のための記事です。主に私
使用環境
- Windows 10 64bit
- Visual Studio 2022 (Community)
- CMake
- Visual Studio Code
この環境下でのC++実装記事です。多くのC++ with CMakeの記事はコンパイラにVisual StudioではなくMinGWを利用していますね。実際こっちでも動きますし、リソースも少なめなので外でサクッと作りたい人にはおススメです。
しかし、C++でOpenCVやCUDA等、外部のライブラリを利用したいってなってコンパイルを立てるときにMinGWの方が弊害が多くて大変なんす...
そこでMinGWではなくVisualStudioを利用しましょうって感じです。まあ、外国のお偉い方々も比較的VisualStudioを利用してますね。Microsoftが大好きなんだろうなぁ
環境の導入
VSCodeのインストール
VSCodeはとても使いやすいエディタです。どんな言語でも簡単に記述できる上に、コンテナ環境やSSH接続など、Linuxに優しいこともできたりします。
Windows10内でVSCodeをダウンロードしましょう。そしてVSCodeを立てましょう。外資やベンチャーに憧れている系は英語のまま使いますね。ですが私は英語が読めないザコなので日本語にします。
この左の3つの□と1つ浮いてるやつ、これをクリック、「japanese」と検索
このJapanese Language Packをインストールしましょう。すると右下らへんにVSCodeを再起動しましょう。って感じのアナウンスが出るので、再起動しましょう。(英語でなんて書いてあったか忘れた。rebootとかrelaunchとかそんなあたりかと)
そうしますと日本語で表記されます。ヤッタネ
依存パッケージのインストール
C++ with CMake環境を再現するための依存パッケージをインストールします。画像を参考に以下のパッケージをインストールしてください。
- C/C++
- C/C++ Compile Run
- C/C++ Extention Pack
- C/C++ Themes
- CMake
- CMake Tools
- Code Runner
CMakeのインストール
CMakeの右上端のdownloadを選択し、自身のOSのバージョンと同じmsiファイルをWindows内にインストール。そしてアナウンスに従い、ダウンロードします。途中でPATH設定の選択があります。しっかりとチェックしておきましょう。
環境変数から~/CMake/binと設定されていることを確認しましょう。ついでにVSCodeのPATHも通ってるか確認
VisualStudio Community 2022のインストール
Visual Studio
oads/)ここで自身の利用するエディションを選択し、インストーラーをインストール、起動します。
私は既にインストールされているので表示されていませんが、Communityを選択し、インストールしました。
コンポーネントの適用
インストールを選択すると、インストールするコンポーネントの設定ができます。ここでインストール前に一部パッケージを増やします。もし既にVisualStudioを導入している方は「変更」からパッケージをお選びください。
一つ一つ述べてるとめんどくさいので、写真を載せておきます。
- C++の埋め込み開発
- 個別のコンポーネント(検索して個別に選択する系)
ちょっとこのライブラリ近辺の具体的な調査はしていないので、一部不要なものもあると思います...まじわけわかんねぇ
これらチェックの付いているものを選択し、VisualStudioに反映させます。インストールにはかなり時間がかかるので、気長に待ちましょう。
C++コードプロジェクトの作成
フォルダを作成してコードを書く
ここまでで事前準備は問題ないですが、VisualStudioのコンポーネント反映のために、一度PCを再起動してから作成しましょう。とりあえずVSCodeを開き、「フォルダを開く」から作成したいプロジェクトフォルダの場所を決めてフォルダを新規作成し、そのフォルダをクリックして、「フォルダの選択」を選択します。
そうしますと、初回に限り信頼問題が発生するので、信頼してあげましょう。寛大ですね。
私はtestというフォルダを作成しました。左の>を押すとそのフォルダが展開されます。上のアイコンからファイル、フォルダを作成可能です。(右クリックも可)これで晴れて、VSCode内でプロジェクトができたというわけですね。
このようなフォルダ階層が出来上がりました。
test__...
|__Code__
|__src.cpp
|__build
|__CMakeLists.txt
それぞれのテキストはこんな感じ
#CMakeの最低保証バージョン
cmake_minimum_required(VERSION 3.1.0)
#プロジェクト名指定
project(test)
set(CMAKE_EXPORT_COMPILE_COMMANDS 1)
include(CheckCXXCompilerFlag)
#ソースコードのフォルダ指定(階層別の方が管理が楽)
set(cpp_code ${CMAKE_CURRENT_SOURCE_DIR}/Code/src.cpp)
#コンパイラ指定
CHECK_CXX_COMPILER_FLAG("-std=c++11" COMPILER_SUPPORTS_CXX11)
CHECK_CXX_COMPILER_FLAG("-std=c++0x" COMPILER_SUPPORTS_CXX0X)
if(COMPILER_SUPPORTS_CXX11)
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -std=c11")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11")
elseif(COMPILER_SUPPORTS_CXX11)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++0x")
endif()
#プロジェクトの作成
add_executable(${PROJECT_NAME} ${cpp_code})
include_directories(${PROJECT_NAME} ${ADDITITONAL_INCLUDE_DIRS})
set_target_properties(${PROJECT_NAME} PROPERTIES FOLDER Examples)
#ビルド設定
install(
TARGETS
test
RUNTIME DESTINATION
${CMAKE_INSTALL_PREFIX}/bin
)
#include <iostream>
using namespace std;
int main()
{
cout << "Hello World" << endl;
return 0;
}
これらはVSCode左上、ファイル(F)の「保存」で開いているファイルを、「すべて保存」で変更内容全てを保存できます。
CMakeの準備
ファイルを保存したらCMakeのセットアップを行います。
表示(V)からコマンドパレットを選択するか、Ctrl+Shift+Pでコマンドパレットを起動します。
CMakeを入力し、「CMake クイックスタート」を実行
ここで、CMakeで利用するコンパイラのキットが聞かれます。「Visual Studio Community 2022 Release -x86_amd64」を選択
もし出てこない場合はコマンドパレットで「CMake キットの選択」から「scan for kits」でキットを検出します。
これでもキットが出ないとき
しかたがないのでキットを無理やり設定します。
エクスプローラーにて
C:\Users\[ユーザー名]\AppData\Local\CMakeTools
を開きます。AppDataは隠しファイルですので、表示の有無を設定しましょう。
この中のcmake-tools-kits.jsonに以下を設定(無い場合は新規作成)
[
{
"name": "Visual Studio Community 2022 Release - x86_amd64",
"visualStudio": "28eae86e",
"visualStudioArchitecture": "x86",
"isTrusted": true,
"preferredGenerator": {
"name": "Visual Studio 17 2022",
"platform": "x64",
"toolset": "host=x86"
}
}
]
カッコの位置とか気を付けてね。
保存して、VSCodeを開きなおし、キットの選択をしたら出てくるのではないでしょうか。
C++のビルドと実行
VSCodeにターミナルの欄があるので、ターミナルを起動
cd build
でbuildディレクトリに移動します。これをやっておくと構成ファイルがbuild内にまとまるから綺麗になるよ
cmake ..
下の階層のCMake検証を行います。~have been written!って書かれていればOK
cmake --build .
これでビルドをします。無事ビルドが成功したらbuild/Debug内にtest.exeが出来ているはず
cd Debug
./test.exe
これで「Hello World」が実行後にターミナルに表示されれば成功です!お疲れさまでした。
お時間あるときに外部ライブラリ(OpenCV、CUDA)の実装記事を書けたらなと思います。