63

そのため、Autotools と CMake のテーマについて多くの記事が書かれているようですが、私の人生では、プロジェクトを Autotools (Makefile.amおよびconfigure.acファイル) から CMake (CMakeLists.txtファイル) に変換する方法に関する適切なチュートリアルを見つけることができないようです。 )。これを行うにはどうすればよいですか?

4

2 に答える 2

112

任意のビルド システムを autotools から cmake に変換する自動ツールはありません。いくつかの適度に大きなプロジェクトを手動で変換しました。autotools から cmake への変換を容易にするために、 and/orファイルCMakeLists.txtのセットごとに1 つのファイルを作成するのが好きです。configure.acMakefile.am

悲しいことに、この手動のアプローチでは、2 つのシステムの専門知識を開発する必要があり、どちらのシステムも、罪のない人に影響を与えるべきではありません。

  1. マシン上で autotools build が実際に行うことの記録を取得します。これは、CMake ビルド システムが実際に同じコンパイル フラグを使用してすべてのファイルをコンパイルし、autotools が実行するすべてのライブラリと実行可能ファイルを作成することを確認するのに役立ちます。少なくともあなたのマシン上で、あなたのオプションで。

    % ./configure [設定オプション] > configure_autotools.log

    % make > make_autotools.log

    % make install > make_install_autotools.log

  2. configure.acまたはファイルを含むすべてのディレクトリMakefile.am(プロジェクトのルート ディレクトリを含む) で、新しい空の CMakeLists.txt ファイルを作成します。add_subdirectoryリーフ以外の各 CMakeLists.txt ファイルにcmake (...) コマンドを追加して、すべての cmake ファイルをツリー構造にリンクします。最上位の CMakeLists.txt ファイルの先頭に cmake project() および cmake_minimum_required() コマンドを追加します。

    project(MyProject)
    cmake_minimum_required(VERSION 2.8)
    add_subdirectory(foo)
    
  3. これで、一貫性はあるが役に立たない、何もしない cmake ビルド システムができました。message(...)より深い CMakeLists.txt ファイルにいくつかのコマンドを一時的に追加して、すべてが正しく接続されていることを確認します。message()cmake 構成の問題をデバッグするときは、それがあなたの友人であることを忘れないでください。今すぐビルドを試して、cmake インフラストラクチャが機能することを確認してください。何もビルドまたはインストールされません。ただし、この時点で cmake インフラストラクチャを実行することは価値があります。

    % mkdir build_cmake

    % cd build_cmake

    % ccmake -i [プロジェクト ルート]

    [構成、構成、生成]

    % make VERBOSE=1

    % make install

  4. これは難しい部分です。CMakeLists.txt ファイルに 1 つずつ入力します。以下にいくつかのガイドラインを示します。

    • 2 つのエディターを並べて開きます。1 つは CMakeLists.txt ファイル、もう 1 つは対応する Makefile.am/configure.ac ファイルです。

    • ブラウザーを開いてcmake コマンドのドキュメントを表示します。

    • 一番上から始めるのではなく、小さなライブラリまたは実行可能ファイルをビルドするための cmake ルールを作成することから始めます (プロジェクト (cmakeadd_library()または) で見つかった場合add_executable())。このアプローチを使用すると、一度に 1 つずつコンバージョンを構築できます。

    • 各ターゲットを追加するたびに、定期的に cmake ビルド システムをテストしてください。

    • cmakefile(GLOB ...)コマンドを使用して、ソース ファイルのリストをコンパクトに作成するのが好きです。これは物議を醸す意見であることに注意してください。

    • 多くの一般的な autotools スタンザには、対応するCMake コマンドがあります。たとえば、 autoconf AC_TRY_COMPILEは cmake TRY_COMPILEに変換できます。しかし、ほとんどの場合、autotools スタンザのすべての機能を理解し、対応する cmake の書き方を理解する必要があります。また、autotools のような config.h ファイルの作成を支援する一連の CMake モジュールもあります。多くの場合、Makefile.am ファイルは変換が簡単で、実際には cmake に変換した後によりコンパクトになります。

    • ステップ 1 でキャプチャした autotools ログと cmake ビルド結果を比較します。コンパイル フラグは同じですか? すべて同じターゲットが構築されていますか? 同じファイルがインストールされていますか?

    • 残念ながら、私は最近 autotools を cmake に変換していないので、「Makefile.am に x が表示されたら、CMakeLists.txt に y を書き込んでください」という包括的な説明を書く立場にありません。autotools から cmake に積極的に変換している人々がそのようなガイドラインの包括的なセットを蓄積できる公開 wiki の適切な場所を誰かが提案できますか? このスタックオーバーフローの回答がそのようなリストに最適な場所であるかどうかはわかりません...

  5. 追加のクレジットとして、すべてが機能したら、cmake ルールを微調整して、Windows Visual Studio からプロジェクトをビルドおよび実行できるようにします。autotools でそれを試してみてください!

于 2011-10-06T20:42:25.327 に答える
12

この変換はプロジェクト固有のものであり、一般的に適用可能なチュートリアルを作成することは困難です。

ここからは、何をすべきかのインスピレーションを与えるツールをいくつか紹介します。

https://gitlab.kitware.com/cmake/community/-/wikis/Home#converters-from-other-buildsystems-to-cmake

===== これに関連する興味深い記事:

KDE プロジェクトが CMake に切り替えた理由とその方法 (続き) http://lwn.net/Articles/188693/

于 2011-09-24T17:05:22.013 に答える