【C++上級編】CMakeを初めて知る

1. 背景知識

CMake は、いくつかのツール キット (VTK) を開発する過程で、Kitware と一部のオープン ソース開発者の派生物であり、最終的にシステムを形成し、独立したオープン ソース プロジェクトになりました。このプロジェクトは 2001 年に誕生し、その公式 Web サイトは www.cmake.org です。公式 Web サイトにアクセスすると、CMake に関する詳細情報を入手できます。CMake の人気は、実際には KDE4 の開発によるものです. KDE 開発者は 10 年近く autotools を使用した後、最終的に KDE4 用の新しいプロジェクト構築ツールを選択することにしました. 根本的な原因は, KDE 開発者の言葉によると:何人かの「コンパイルの専門家」が KDE の現在のビルド システム (admin/Makefile.common) をマスターできます unsermake、scons、および CMake の選択と試行を経験した後、KDE4 は独自のビルド システムとして CMake を使用することにしました。移行プロセス中、進行は非常にスムーズで、CMake 開発者のサポートが得られました。したがって、現在の KDE4 開発版は完全に CMake を使用してビルドされています。kdesvn や rosegarden などのプロジェクトでも、主流の構築システムになる運命にある CMake の使用が開始されています。

2.特徴

CMake は、クロスプラットフォーム開発のプロセスを簡素化する非常に強力で柔軟なビルド ツールです。

  • クロスプラットフォームのサポート: CMake は、Linux、macOS、Windows、その他の UNIX 系システムなど、さまざまなオペレーティング システムをサポートしています。これにより、CMake を使用するプロジェクトをさまざまなプラットフォームで簡単にビルドして実行できます。
  • 複数のビルド システムのサポート: CMake は、GNU Make、Ninja、Microsoft Visual Studio など、複数のビルド システム用のファイルを生成できます。これにより、さまざまなビルド環境でプロジェクトを実行するための優れた柔軟性が提供されます。
  • ビルド プロセスを簡素化する: CMake は、さまざまなコンパイラとプラットフォーム固有の詳細を自動的に処理します。これにより、開発者は、異なるオペレーティング システム、コンパイラ、およびビルド ツール間の互換性の問題を心配することなく、コードの記述に集中できます。
  • 強力な依存関係管理: CMake は、プロジェクトの依存関係を自動的に検出して管理できます。find_package コマンドを使用すると、CMake はプロジェクトに必要なライブラリとヘッダー ファイルを見つけてリンクできます。
  • モジュール性: CMake はモジュール設計を採用しているため、開発者はプロジェクトを複数のサブプロジェクトとコンポーネントに分割できます。各サブディレクトリ内の CMakeLists.txt ファイルは、ビルド ルールと依存関係を個別に構成できるため、プロジェクトの編成が簡素化されます。
  • 拡張性: CMake には優れた拡張性があり、関数、マクロ、およびモジュールをカスタマイズすることで、特定のプロジェクトのニーズを満たすことができます。これにより、CMake はさまざまな種類のプロジェクトやワークフローに適応できます。
  • 言語サポート: CMake は、C、C++、Objective-C、Fortran などの複数のプログラミング言語をサポートしています。これにより、CMake はさまざまなプログラミング言語で記述されたプロジェクトを簡単に管理および構築できます。
  • コミュニティ サポート: CMake には、ユーザーと開発者の大規模なコミュニティがあり、豊富なリソースとドキュメントを提供しています。これにより、初心者が簡単に使い始めることができると同時に、問題のトラブルシューティングや機能の改善のサポートも提供されます。

3. 既存の問題

  • 学習曲線: CMake は、独自のカスタム スクリプト言語を使用して記述されているため、初心者が学習して理解するには、ある程度の時間と労力がかかる場合があります。
  • 言語の制限: Python などの他のプログラミング言語と比較して、CMake のスクリプト言語は機能が制限されているため、特定のタスクの実装がより複雑になります。
  • ドキュメントと例: CMake のドキュメントは比較的充実していますが、初心者には理解しにくい場合があります。さらに、高品質の例やチュートリアルが比較的少ないため、CMake の学習はさらに難しくなっています。
  • 冗長な構文: CMake の構文は冗長で反復的に見える場合があり、CMakeLists.txt ファイルが大きくなり、保守が困難になります。
  • クロスプラットフォームの問題: CMake はクロスプラットフォームの互換性を実現することに取り組んでいますが、場合によっては、開発者は異なるプラットフォーム用に特定のコードと設定を記述する必要があります。
  • 依存関係の管理: CMake の依存関係の管理は、特に Python の pip や JavaScript の npm などの最新のパッケージ マネージャーと比較すると、比較的脆弱です。これにより、プロジェクト内の依存関係の管理と維持が困難になる可能性があります。
  • コミュニティの断片化: CMake には複数のバージョンとさまざまなプラクティスがあり、コミュニティ内で分裂や矛盾が生じる可能性があります。これにより、解決策やベスト プラクティスを見つけることが難しくなります。

4. インストール

4.1 ウィンドウ

  1. CMake インストーラーをダウンロードする:
    CMake の公式 Web サイト (https://cmake.org/download/) にアクセスし、Windows 用の CMake インストーラー (「.msi」ファイル) をダウンロードします。

  2. インストーラーを実行します。
    ダウンロードした「.msi」ファイルをダブルクリックし、インストール ウィザードのプロンプトに従います。コマンド プロンプトで CMake をグローバルに使用するには、インストール中に [システム PATH に CMake を追加する] オプションをオンにすることをお勧めします。

4.2 マック

  1. Homebrew の使用 (推奨):
    Homebrew (macOS 用のパッケージ マネージャー) が既にインストールされている場合は、ターミナルで次のコマンドを実行して CMake をインストールします。
    brew install cmake
    
  2. CMake インストーラーのダウンロード:
    CMake の公式 Web サイト (https://cmake.org/download/) にアクセスし、macOS 用の CMake インストーラー (「.dmg」ファイル) をダウンロードします。「.dmg」ファイルをダブルクリックし、インストール ウィザードのプロンプトに従います。

4.3 リナックス

  1. パッケージ マネージャーの使用 (推奨):
    ほとんどの Linux ディストリビューションでは、システムに付属のパッケージ マネージャーを使用して CMake をインストールできます。一般的な Linux ディストリビューションのインストール コマンドは次のとおりです。

    • Ubuntu/Debian:
      sudo apt-get update
      sudo apt-get install cmake
      
    • フェドーラ:
      sudo dnf install cmake
      
    • CentOS/RHEL:
      sudo yum install cmake
      
    • アーチ Linux:
      sudo pacman -S cmake
      
  2. ソース インストールのコンパイル:
    Linux ディストリビューションにコンパイル済みの CMake パッケージがない場合、または特定のバージョンの CMake をインストールする必要がある場合は、ソースから CMake をコンパイルしてインストールできます。まず、CMake の公式 Web サイト (https://cmake.org/download/) から CMake のソース コード tarball をダウンロードします。次に、以下の手順に従います。

# 解压下载的源代码压缩包
tar -xzvf cmake-x.y.z.tar.gz
cd cmake-x.y.z

# 编译和安装CMake
./bootstrap
make
sudo make install

上記のコマンドで、「xyz」を実際にダウンロードした CMake のバージョン番号に置き換えます。

インストールが完了したら、コマンド ラインに入力して、cmake --versionCMake が正常にインストールされたかどうかとそのバージョン情報を確認できます。

5. CMake での最初の試み

ソース ファイル (main.cpp) とヘッダー ファイル (hello.h) を持つ単純な C++ プロジェクトがあるとします。CMake のビルド プロセスは次のとおりです。

  1. まず、CMakeLists.txtという名前のファイルを作成します。これは CMake の構成ファイルで、ビルド規則と依存関係が含まれています。

  2. CMakeLists.txt以下を追加します

    cmake_minimum_required(VERSION 3.10) # 设置CMake的最低版本要求
    project(HelloWorld) # 为项目命名,这里是HelloWorld
    
    set(CMAKE_CXX_STANDARD 11) # 设置C++标准,这里是C++11
    
    add_executable(hello_world main.cpp) # 添加一个可执行文件,名称为hello_world,使用main.cpp作为源文件
    

    説明:

    • cmake_minimum_requiredプロジェクトに必要な CMake の最小バージョンを指定します。これにより、プロジェクトが古いバージョンの CMake と互換性があることが保証されます
    • projectプロジェクトに名前を付けるコマンド。プロジェクト名はこちらHelloWorld
    • set変数を設定するコマンド。ここでは、CMAKE_CXX_STANDARD変数を設定して、プロジェクトで使用される C++ 標準を指定します。ここでは C++11 です。
    • add_executableコマンドは、CMake に という名前の実行可能ファイルを作成しhello_worldmain.cppソース ファイルとして使用するように指示します。
  3. ターミナル (Linux/macOS) またはコマンド プロンプト (Windows) を開き、プロジェクトのルート ディレクトリに移動します。

  4. という名前のフォルダーを作成しますbuildこのフォルダーは、CMake によって生成されたビルド ファイルを格納するために使用されます。

    mkdir build
    cd build
    
  5. CMake を実行してビルド ファイルを生成します。buildフォルダーで、次のコマンドを実行します。

    cmake ..
    

    ..これにより、親ディレクトリのファイルからビルド構成を読み取り( ) CMakeLists.txtbuild現在のディレクトリにビルド ファイルを生成するように CMake に指示します ( )。

  6. build コマンドを実行して、プロジェクトをコンパイルします。buildフォルダーで、次のコマンドを実行します。
    Linux/macOS の場合:

    make
    

    Windows の場合 (Visual Studio ジェネレーターを使用):

    cmake --build .
    
  7. 正常にコンパイルされると、build実行可能ファイルがディレクトリに見つかりますhello_world(Windows の場合hello_world.exe)。これを実行して、プログラムの出力を確認できます。

おすすめ

転載: blog.csdn.net/weixin_52665939/article/details/130312205