web-dev-qa-db-ja.com

AutotoolsプロジェクトをCMakeプロジェクトに変換するにはどうすればよいですか?

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

53
Kurtis Nusbaum

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

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

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

    %./configure [configure options]> configure_autotools.log

    %make> make_autotools.log

    %make install> make_install_autotools.log

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

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

    %mkdir build_cmake

    %cd build_cmake

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

    [構成、構成、生成]

    %VERBOSE = 1にする

    %インストールする

  4. これは難しい部分です。 1つずつ、CMakeLists.txtファイルに入力します。ここにいくつかのガイドラインがあります:

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

    • ブラウザで cmakeコマンドのドキュメント を開きます。

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

    • 各ターゲットを追加するときに、cmakeビルドシステムを定期的にテストします。

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

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

    • Cmakeのビルド結果を、手順1で取得したautotoolsログと比較します。コンパイルフラグは同じですか?すべて同じターゲットが構築されていますか?同じファイルがインストールされていますか?

    • 残念ながら、最近autotoolsをcmakeに変換していないため、包括的に「xがMakefile.amにある場合はyをCMakeLists.txtに書き込みます」と書く立場にはありません。 autotoolsからcmakeに積極的に変換している人々がそのようなガイドラインの包括的なセットを蓄積できる公開wikiの良い場所を誰かが提案できますか?このstackoverflowの答えがそのようなリストに最適な場所かどうかはわかりません...

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

85

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

ここでは、何をすべきかについていくつかのインスピレーションを与えることができるいくつかのツールの始まりです。

http://www.vtk.org/Wiki/CMake#Converters_from_other_buildsystems_to_CMake

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

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

11
Hans