問題タブ [cpack]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
cmake - CPack NSIS、Windows 用のインストーラーを生成
VS プロジェクト内でパケット ジェネレーターを実行しようとしていますが、ターゲットとファイルからのインストールで絶対パスを使用しているため、コンパイル中にクラッシュします。
2 回確認しましたが、すべてのインストール ディレクトリは相対的です。${PROJECT_BINARY_DIR} のサブフォルダーとして、次のような非常に多くの変数を設定しました (これは相対的である必要があります)。
CMAKE/CPACK はこれらの変数を絶対パスとして解釈しますか? もしそうなら、それらの変数で CPack を適切に動作させる方法はありますか? サブ相対パスが関係している場合に CPack を使用するにはどうすればよいですか?
ありがとう
cmake - CPack: エクスポートを使用してライブラリ パッケージを作成する方法は? *Targets-noconfig.cmake ファイルがありません
アップデート
Windows の cpack バージョンのバグのようです。Linux (Ubuntu) では、cpack コマンドで不足しているファイルが表示されます。時間があるときに、さらに調査を行い、結果を投稿します。
注: この質問を単純化して新しい短い例を作成することができたので、この質問を完全に変更しました。しかし、コアの問題は少しも変わりませんでした。
問題の説明
私はライブラリ プロジェクトを持っています。それを Foo と呼びましょうcpack
。コマンドを使用してパックします。このパッケージにはFooConfig.cmake
、FooTargets.cmake
ファイル (cmake メカニズムによってエクスポートされた 2 番目のファイル) が含まれています。問題は、cmake がそれを使用するのに十分ではないということです。find_package()
で見つけたのですが、でリンクするfoo
とNo rule to make target foo-NOTFOUND', needed by bar.exe'. Stop.
エラーが出ます。
しかし、でインストールするとmake install DESTDIR=./out_dir
、動作し、もう 1 つのファイルが含まれます: FooTargets-noconfig.cmake
. このファイルには、foo ライブラリ ファイルへのパスが含まれています。
それで、これを修正するために私は何をする必要がありますか?この動作を説明するドキュメントはありますか?
おまけの質問:*-noconfig*
ファイルにはライブラリへのパスが含まれていますが、ヘッダー ディレクトリへのパスは含まれていません。この生成されたファイルにも自動的に含まれるようにライブラリ プロジェクトを構成する方法はありますか?
詳細情報、メモ:
- 私の OS: Windows 7、64 ビット。
- コンパイラ: MinGW 4.4.0 (32 ビット)。(注: はい、代わりにコマンド
make
を使用しますmingw32-make
。) - CMake バージョン: cmake 2.8.12.2。
- の結果を使用しようとする
make install
と、No rule to make target xyz-NOTFOUND', needed by Index.exe'. Stop.
エラーが消え、すべてがコンパイルされ、結果のexeが期待どおりに機能しました。必要なものは noconfig ファイルだけのようです。
ワークフロー / 再現手順:
- コードを作成した後 (以下を参照):
cmake-gui
ビルド ディレクトリ (ライブラリ プロジェクト) を作成する (構成、次に生成)mingw32-make
ビルドディレクトリに- バリアント a)
mingw32-make install DESTDIR=./out_dir
ライブラリをインストールする - バリアント b)
cpack -C CpackConfig.cmake -G ZIP
ライブラリでパッケージを取得する - 前のステップのファイルを使用し、環境変数にある特別なディレクトリに移動して
CMAKE_PREFIX_PATH
、cmake がそれを見つけられるようにします (元のファイルが削除されるように、「コピー」ではなく「移動」に注意してください)。 cmake-gui
実行可能プロジェクトの場合 (再度、構成、次に生成)mingw32-make
ビルドディレクトリに
最後のステップは、バリアント a) と b) で異なります。a) の場合、期待どおり、ビルドが終了し、実行可能ファイルが正常に動作します。b) の場合、エラーNo rule to make target xyz-NOTFOUND', needed by Index.exe'. Stop.
が表示され、それ以上の情報はありません。
私のコード例:
Foo/CMakeLists.txt:
フー/foo.cpp:
フー/フー.h:
Foo/FooConfig.cmake :
バー/CMakeLists.txt:
バー/bar.cpp
いくつかの生成されたファイル:
興味がある場合のために、生成されたファイルはいくつかあります。
lib/foo/FooTargets-noconfig.cmake
lib/foo/FooTargets.cmake
macos - Open 経由で OSX バンドルを実行する
OpenCV と Qt を含む OSX で CMake/CPack を使用して OSX バンドルを作成しようとしています (ただし、現時点ではこれらの依存関係は重要ではないと思います)。すべてがコンパイルされ、バンドルが正常に作成されます。バンドル内のターミナルから実行すると、作成中の実行可能ファイルなどの必要なライブラリ パスを変更するスクリプトがあります。私が抱えている問題は、open コマンドを使用して MyApp.app ファイルを実行しようとするか、アプリをダブルクリックするだけでエラーが発生することです。
アクセス許可の変更に関連する他の LSOpenURLsWithRole() エラーに対する他の解決策を見てきましたが、それは役に立ちませんでした。また、このエラーコードは「不明なエラー」ですので、どう進めればよいかわかりません。
cmake - CMake コンポーネントのインストール時にインストールされるファイルのリストを取得する方法
がインストールされている場合にどのファイルがインストールされるかCOMPONENT
(コンポーネントのようなもの) をプログラムで (CMake で) 知る方法はありget_property
ますか?
現在、COMPONENT
パッケージ用の一時的な場所に をインストールし (パッケージにはCPackを使用しません)、カスタム コマンドを使用してパッケージを作成しています。CMake でのパッケージ化中に次のコマンドを呼び出しています。
ファイルのリストを取得して、それらのファイルのみをパッケージに明示的に含めることができるかどうかを知りたいですか? または、それらをカスタム コマンドの出力として追加することはできますか?
installation - cpack への追加コマンドの追加 - NSIS パッケージャー/インストーラー
CPack と NSIS を使用して、既存の
GeneratorConfig.cmake
ファイルを使用して Windows 用の私のプロジェクトをパッケージ化したいと考えてい.ini
ます。myProject.ini
%APPDATA%/myProject/myProject.ini
これは GeneratorConfig.cmake です
以下のコードでこれを実行しようとしましたが、これによりパッケージがビルドされますが、myProject.ini
どこにもコピーされません。
ヘルプや提案をいただければ幸いです。
cmake - CMake を使用して CPack バイナリからファイル/ディレクトリを除外する方法
以下のような構造のプロジェクトがあります。
にはいくつかのライブラリ依存関係がありますdeps
。これらのライブラリにはすべて CMakeinstall
コマンドがあります。
の後install
、出力ファイルは次のbuild
ディレクトリに配置されます。
私の場合、実行cmake package
してバイナリ インストール パッケージを生成し_CPack_Packages
ます。
問題は、バイナリに含まれるlib
必要がないことです。include
しかし、私はまだ解決策を見つけていません。
次の方法を試しました。
CPACK_SOURCE_IGNORE_FILES
とCPACK_SOURCE_STRIP_FILES
。
これらは、私が考えるソースをパッケージ化するためのものであり、私の場合には機能しません。
- ポスト インストール スクリプト
instal(SCRIPT "${CMAKE_CURRENT_SOURCE_DIR}/clean.cmake")
を使用して、不要なファイル/ディレクトリを削除します。
clean.cmake
、if(EXISTS "${CMAKE_INSTALL_PREFIX}/bin/ProjectA.lib")
返されたでは、スクリプトの実行FALSE
中はディレクトリに何もありませんが、${CMAKE_INSTALL_PREFIX}
終了後にファイルを見つけることができます。
- を変更してみてください
install_manifest.txt
。このファイルに正しくアクセスする方法が見つかりません。これが機能するかどうかはわかりません。
ご協力ありがとうございました!
編集:
以下のinstall
ようなコマンド: