5

私はcmakeとcpackを使用してプロジェクトをビルドし、パッケージをビルドしています。EXE1プロジェクトでいくつかの実行可能ファイルを作成しています。それらをとと呼びましょうEXE2

これらの実行可能ファイルの異なるバージョンを作成するときは、実行可能ファイルのバージョンを反映するように名前を付けたいと思います(たとえばEXE1_1.0.0)。を実行すると、ターゲットの出力の名前を変更できますset_target_properties

ただし、これを実行するときinstallに、実行可能ファイルのこのバージョン化された名前へのシンボリックリンクを作成したい、つまり、

  • binディレクトリにインストールされた「バージョン管理された」実行可能ファイル、つまりEXE1_1.0.0
  • 「バージョン管理された」実行可能ファイルへのシンボリックリンクを作成します。つまりEXE1、を指すシンボリックリンクを作成します。EXE1_1.0.0

誰かが私にこれを行う方法を提案できますか?

2番目の質問は次のとおりです。構成ファイル/etc/MYPROJECT/ディレクトリをインストールするにはどうすればよいですか。bin実行可能ファイルやlibライブラリに使用するように、構成ファイルに使用する必要がある宛先は何ですか?/etccmakeで許容できる方法のような絶対パスを使用していますか?

4

1 に答える 1

3

その後、cmakeメーリングリストでこの質問をしました。これが私が受け取った応答です。

回答の有効性は、使用するCMakeのバージョンとサポートするプラットフォームのセットによって異なります。

シンボリックリンクはそれほど移植性がありません

a)作成は[現在]移植可能に行われていない可能性がありますが、Unixをターゲットにしている場合は、cmake-Ecreate_symlinkを使用して作成できます。

b)使用するCPackジェネレーターと、CMake/CPackバージョン
のシンボリックリンクがパッケージに埋め込まれているかどうかによって異なります。

つまり、CPack 2.8.7より前のCPackは、シンボリックリンクを含むZIPアーカイブを作成できません。CPack2.8.8は現在それを実行できます。

次に、install(SCRIPT ...またはinstall(CODE ...)を使用して、インストール時にそれを行うことができます。

RPMを使用している場合の別のオプションは、パッケージ固有のインストール後スクリプトを使用することです。cpack --help-variable CPACK_RPM_POST_INSTALL_SCRIPT_FILE

この最後のソリューションは、もちろんCPackRPMでのみ機能します。

2番目の質問について

絶対宛先パスを使用できます。CPackDEBとRPMで問題なく処理できるはずですが、他のパスについてはわかりません。

ソフトウェアをWindowsにインストールする必要がある場合、これはアーカイブジェネレーター(ZIP、TGZなど)やNSISでは機能しません。

次のようなことができるかもしれません:

if(UNIX AND NOT APPLE)set(CONFDEST "/ etc / $ {CMAKE_PROJECT_NAME}")else()set(CONFDEST "etc")endif()

install(FILES yourconffile DESTINATION $ {CONFDEST})

于 2012-04-24T11:44:07.270 に答える