5

CPack を使用して Linux tgz 自己解凍型インストーラーを作成しています。すべてのファイルがインストールされた後に、スクリプトまたは一連のコマンドをインストーラーで実行したいと考えています。CPack ドキュメントには、次のガイダンスが含まれています。

CPACK_INSTALL_COMMANDS コンポーネントをインストールするための追加コマンド。

この変数を CMakeLists.txt ファイルに設定すると、結果の CPackConfig.cmake ファイルに設定されていることがわかりますが、この変数に埋め込んだコマンドは、最終的な .sh インストール スクリプトのどこにも表示されません。私は何が欠けていますか?

4

1 に答える 1

6

あなたは何も見逃していません.CPACK_INSTALL_COMMANDS変数がどのように機能するかは単純ではありません.

典型的なプロジェクトでは、CPack は「make install」ツリーに基づいて最終的なインストーラーを構築するために、一時的な場所に「make install」を実行します。CPACK_INSTALL_COMMANDS 変数は、インストール ツリーを生成するために通常の「make install」ではなく、他のコマンド シーケンスを実行するプロジェクト用に設定することを意図しています。

そのため、CPack はパッケージを生成するときにコマンドを実行する必要があります。生成されたインストール スクリプトを実行しているエンド ユーザーのマシンでコマンドを実行することはありません...

エンド ユーザーによるインストールの最後に、インストールされた実行可能ファイルやスクリプトを実行するジェネレーターごとの方法がありますが、一部のカスタマイズが必要になります。この場合、CPack が STGZ 自己解凍型スクリプトを生成するときに使用される CPack.STGZ_Header.sh.in 入力ファイルをオーバーライドすることをお勧めします。そのファイルをカスタマイズして、呼び出しを行の上に追加します。

exit 0

ファイルをオーバーライドするには、ソース ツリー (おそらく ${CMAKE_CURRENT_SOURCE_DIR}/CMake ディレクトリ) に独自のコピーを提供し、CMakeLists.txt ファイルに次を追加します。

set(CMAKE_MODULE_PATH ${CMAKE_CURRENT_SOURCE_DIR}/CMake ${CMAKE_MODULE_PATH})

(実際、これを書いているときに、それで十分なのか、CPack の実行時にモジュール パスも設定する必要があるのか​​ 疑問に思っています...これを試して、カスタマイズが使用されるかどうかをお知らせください。 CPack かどうか. そうでない場合は、もう少し調査して、ここにいくつかのアドバイスを追加します.)

于 2011-11-16T15:20:37.860 に答える