問題タブ [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ようなコマンド: