カテゴリ: C++ 更新日: 2025/12/06

CMakeでマルチプラットフォーム対応を初心者向けに解説

CMakeによるマルチプラットフォーム対応
CMakeによるマルチプラットフォーム対応

先生と生徒の会話形式で理解しよう

生徒

「先生、CMakeで作ったC++プロジェクトって、WindowsとMacの両方で動かせますか?」

先生

「もちろんです。CMakeは、マルチプラットフォーム対応が大きな特徴です。CMakeLists.txtに正しく設定すれば、同じソースコードで異なる環境向けにビルドできます。」

生徒

「でも、Windows用とMac用でコンパイラや設定が違うんじゃないですか?」

先生

「その違いをCMakeが吸収してくれるんです。環境ごとにMakefileやVisual Studioプロジェクト、Xcodeプロジェクトを自動生成できるんですよ。」

1. マルチプラットフォーム対応とは?

1. マルチプラットフォーム対応とは?
1. マルチプラットフォーム対応とは?

マルチプラットフォーム対応とは、同じC++ソースコードをWindows、Mac、Linuxなど複数の環境でコンパイル・実行できることを指します。プログラミング初心者には少し難しそうに聞こえますが、CMakeを使えば手作業で設定を変える必要がなくなります。

例えば、WindowsではVisual Studioを使い、MacではXcodeを使う場合でも、CMakeLists.txtに依存関係やビルドターゲットを記述しておけば、環境ごとに最適化されたプロジェクトを自動生成できます。

2. CMakeLists.txtで環境ごとに条件分岐

2. CMakeLists.txtで環境ごとに条件分岐
2. CMakeLists.txtで環境ごとに条件分岐

CMakeでは、if(WIN32)if(APPLE)のような条件分岐を使って、OSごとに異なる設定を書くことができます。例えば、Windowsでは特定のライブラリをリンクし、Macでは別のライブラリをリンクする、といった使い方です。


cmake_minimum_required(VERSION 3.10)
project(MultiPlatformProject)

set(CMAKE_CXX_STANDARD 17)

add_executable(main main.cpp)

# OSによる条件分岐
if(WIN32)
    message("Windows向けビルド")
    target_link_libraries(main PRIVATE ws2_32)
elseif(APPLE)
    message("Mac向けビルド")
    target_link_libraries(main PRIVATE "-framework Cocoa")
elseif(UNIX)
    message("Linux向けビルド")
    target_link_libraries(main PRIVATE pthread)
endif()

このように書くと、CMakeは現在のOSを判定して、適切なライブラリやフラグを自動で設定します。初心者でも複雑なOS依存の処理を簡単に管理できるようになります。

3. ビルドの手順

3. ビルドの手順
3. ビルドの手順

マルチプラットフォーム対応でも、CMakeのビルド手順は基本的に同じです。ターミナルやコマンドプロンプトで以下を実行します。


mkdir build
cd build
cmake ..
make      # Windowsでは "cmake --build . " も使用可能
./main

実行結果は、どのOSでも同じく「Hello, C++ World!」など、ソースコード通りの出力になります。CMakeは環境ごとに最適なビルド設定を行ってくれるため、複数のOSで同じプロジェクトを安全に動かすことができます。

4. CMakeでマルチプラットフォーム対応するメリット

4. CMakeでマルチプラットフォーム対応するメリット
4. CMakeでマルチプラットフォーム対応するメリット
  • 同じソースコードを複数のOSでビルド可能
  • 環境依存のライブラリやコンパイラ設定を自動化
  • ビルド手順が統一され、初心者でも迷わない
  • プロジェクトの移植性が向上し、チーム開発に最適

CMakeを使うことで、Windows、Mac、Linuxの環境差を意識せずにC++開発が行えます。特に初心者でも、CMakeLists.txtに正しく設定するだけで、複雑なマルチプラットフォーム対応が簡単に実現できます。

カテゴリの一覧へ
新着記事
New1
C++
C++の変数のスコープと有効範囲を完全解説!初心者でもわかる基本と考え方
New2
C++
C++とは?歴史と特徴を初心者向けに解説!Rustとの違いとモダン言語比較
New3
C++
MinGWとMSYS2でWindowsにC++環境を構築する方法を徹底解説!初心者でもできるセットアップガイド
New4
Rust
Rust開発環境をLinuxで構築する方法とおすすめ設定を初心者向けに徹底解説
人気記事
No.1
Java&Spring記事人気No1
C言語
C言語をオンラインで実行できる便利なコンパイラサービスまとめ【初心者向け】
No.2
Java&Spring記事人気No2
C言語
C言語の関数定義と呼び出しを完全ガイド!初心者でも分かる基本の書き方
No.3
Java&Spring記事人気No3
C++
C++の主要な実装をわかりやすく解説!GCC・Clang・MSVCの違いと特徴
No.4
Java&Spring記事人気No4
C言語
C言語の列挙型(enum)の使い方を完全ガイド!初心者でもわかる基本操作
No.5
Java&Spring記事人気No5
C言語
Makefile入門:C言語プロジェクトを自動ビルドしよう!初心者でも分かる仕組みと使い方
No.6
Java&Spring記事人気No6
C言語
C言語の開発環境をWindowsに構築する方法【Visual Studio編】
No.7
Java&Spring記事人気No7
C言語
Visual Studio CodeでC言語を実行する方法【拡張機能の設定と実行手順】
No.8
Java&Spring記事人気No8
C++
MinGWとMSYS2でWindowsにC++環境を構築する方法を徹底解説!初心者でもできるセットアップガイド