Debian用CMakeコンポーネントのパッケージング

Debian用CMakeコンポーネントのパッケージング

2つのバイナリDebianパッケージにパッケージ化したいcmakeを使用するアップストリームソースパッケージがあります。

$ tree proj
proj/
├── app1.c
├── app2.c
└── CMakeLists.txt

アップストリームはCMakeLists.txtこれを念頭に置いて作成されました。 COMPONENTSパラメーターを使用してください。install

$ cat proj/CMakeLists.txt
include(GnuInstallDirs)

add_executable(app1 app1.c)
install(
  TARGETS app1 
  RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
  COMPONENT app1)

add_executable(app2 app2.c)
install(
  TARGETS app2
  RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
  COMPONENT app2)

ローカルにコンパイル/インストールする方法は非常に簡単です。

$ mkdir build && cd build
$ cmake ../proj -DCMAKE_INSTALL_PREFIX=/usr/local  # Configure
$ cmake --build .                                  # Build
$ cmake -DCOMPONENT=app1 -P cmake_install.cmake    # Install app1 component
$ cmake -DCOMPONENT=app2 -P cmake_install.cmake    # Install app2 component

debian/rulesしかし、そのためのファイルを作成するには?

ベストアンサー1

標準のdebhelperdebain/rulesファイルは次のとおりです(ビルドシステムは最新の互換性レベルでcmakeを自動的に検出します)。

%:
        dh $@    # --buildsystem=cmake  <-- older compat levels may need this

これは効率的に行われますmake install DESTDIR=debian/tmp。ただし、これを行うとすべてが1つのターゲットに保存されるため、ファイルを分割するためにdebian/*.installファイルを手動で作成する必要があります(参照:dh_install(1))。これは、単一のcmakeソースコードを複数のバイナリに変換する一般的な方法です。 Debian のマニュアルには良いガイドがあります。ここ

ただし、アップストリームでは、コンポーネントのインストールを定義してすでにこれを行います。

これを利用するには、独自のインストール方法を上書きしてパッケージ/コンポーネント接続を指定します。

include /usr/share/dpkg/architecture.mk

%:
        dh $@

override_dh_auto_install:
        sed -i -e 's/\-P/\-DCOMPONENT\=app1\ \-P/g' obj-$(DEB_HOST_MULTIARCH)/Makefile
        dh_auto_install --destdir=debian/app1

        sed -i -e 's/\-DCOMPONENT\=app1/\-DCOMPONENT\=app2/g' obj-$(DEB_HOST_MULTIARCH)/Makefile
        dh_auto_install --destdir=debian/app2

ルートはこのバイナリパッケージにdebian/<binary_package_name>表示されます。/

私はこのコマンドに少しがっかりしましたsed-- -DCOMPONENT=app1dh_auto_installディレクトリに渡してこれを実行したいと思います。代わりに、このコマンドはcmakeによって自動的に生成されたMakefileを編集します。このソリューションは、を使用しており、インストールコマンドにmake一意の-P文字列があると仮定します(これまでに確認したプロジェクトの場合のようです)。この回答の編集内容を受け入れ、より良いソリューションを提供することを嬉しく思います。

注:Kitware(cmake開発者)は新しいdebhelper拡張を開発しています。dh-cmakeこれにより簡単になりそうです。ただし、Debian 10(buster)ではまだ使用できません。

おすすめ記事