問題タブ [cmake-custom-command]
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.
c++ - add_custom_target/command から CMake 関数を呼び出す方法は?
orから CMake 関数を呼び出すことは可能ですadd_custom_target
かadd_custom_command
?
CMake 関数を Python (または何でも) スクリプトに移動してadd_custom_target
/から呼び出すことができることはわかってcommand
いますが、既存の CMake インフラストラクチャの横に大量のスクリプトを配置することは避けたいと考えています。
私が達成したいのは、CPack を使用してバイナリ アーティファクトの zip パッケージを生成し、それらをアーティファクト リポジトリに公開することです。パブリッシング部分については、既に CMake 関数を作成しましたが、パッケージ化とパブリッシングを組み合わせる必要があります。
事前にヘルプ/ヒントをありがとう。
cmake - CMake/CPack: add_custom_command TARGET パッケージ POST_BUILD
ここで説明したのと同じ問題があり、TARGET「パッケージ」の POST_BUILD コマンドとしてシェルスクリプトを実行したいと考えています。ターゲット プラットフォームは Debian/Ubuntu です。
CMakeLists の最後に以下を追加します。
しかし、これはうまくいきません。「make package」を呼び出しても、スクリプトは変更されません。
現時点では、カスタム ターゲットを使用した回避策があります。
しかし、「make package」を呼び出すときにこれが自動的に行われると、私にとってははるかに快適でフェールセーフになります。
ちなみに、${PROJECT_BINARY_DIR}/fixup_deb.shの生成は以下でもうまくいきます:
cmake - cmake add_custom_command と DEPENDS/TARGET
トップレベルの CMakeLists.txt にこれがあります:
${PROJECT_NAME} のビルド時に data サブディレクトリにファイルを作成します。次は機能せず、ターゲット「foo」が存在しないことを返します。
これも機能しません。戻り値: ターゲット名「foo」は、このコンテキストでは不明です
しかし、これは期待どおりに機能します。
質問:
1.- 「foo」がターゲットを使用せずにビルドされている場合、add_custom_command を使用してコマンドを実行するにはどうすればよいですか?
2.- なぜ add_dependencies は "foo" を知っているのに、純粋な add_custom_command は知らないのですか?
更新 #1 : シンプルなコード:
cmake - add_custom_command がターゲットを生成していません
おそらくこれは不可能であり、cmake 3.2 のドキュメントを誤解していますが、カスタム コマンドを作成すると Makefile にカスタムの「ターゲット」が作成され、出力ファイルの名前を呼び出してターゲットをビルドできるようになります。CMake のドキュメントには次のように書かれています。
Makefile の用語では、これにより次の形式で新しいターゲットが作成されます。
だから私は走れると思ったmake OUTPUT
。ドキュメントが CMake ターゲットと Makefile ターゲットを混同しているのではないでしょうか?
例えば、
やりたい
となりますfoo_out
。ただし、これを行うと、
確かに、「foo_out」という単語は、cmakeバイナリ出力ディレクトリのどのファイルにも存在しません。これに変えたら
それから私はすることができます
そして私はできる
しかし、私はまだできません
の問題make bar
は、実際のファイル出力が .xml ではないため、直感的でfoo_out
ないことbar
です。
どうすればいいですか?
私の場合、オプションのリソースを ELF ファイルに挿入する、標準の実行可能ターゲットに対して特別な処理ステップを実行する必要があります。両方の実行可能ファイルを Makefile ターゲットとして使用できるようにしたいので、ネイキッド ELF 実行可能ファイルとリソースが注入された ELF 実行可能ファイルをビルドできます。
カスタムの Makefile を作成していた場合、これは簡単です。
そして、私はすることができmake foo_in
ますmake foo_out
。
cmake - CMake ビルド プロセス自体の add_custom_command() の方法は?
add_custom_command (特定のファイルが変更されたときに外部スクリプトを実行する) に相当する方法はありますが、CMake スクリプト自体の実行中に実行する必要があるものはありますか? (つまり、ディペンデンシー グラフの生成用です。)
ソース コード ファイルは複数のサブライブラリに分割されており、どのソース ファイルがどのライブラリに対応するかをリストした構成ファイルがあります。(これらの構成ファイルの形式は、私たちが使用する別のツールによって固定されています。) 現在、これらの構成ファイルを解析して新しいファイルを書き込むカスタム外部スクリプトを実行します。これらのファイルは CMake ビルド プロセスによって読み込まれ、ファイル名のリストがadd_library() に渡されます。これは、ソース ファイルが追加/削除されるたびに、CMake を再実行する前に prebuild コマンドを再実行することを忘れずに、ビルド コマンドを再起動する必要があることを意味します。
CMake はそれ自体を再実行する必要があることを認識できることを知っているので、CMake に 1) 構成ファイルが変更されたことを認識させる 2) 構成ファイル パーサーを再実行する 3) 新しいファイル リストをロードする 4)新しいファイル リストを使用して依存関係ツリーを再生成します。 5) 最後に、新しいファイルを含めて実際のビルド/コンパイル プロセスを開始します。...そして、これらすべてを標準のビルド コマンドから行います。手動で外部構成ファイル パーサーを実行したり、CMake コマンドを手動で再実行したりする必要はなく、構成ファイルが変更されていない場合に不必要に実行する必要もありません。
検索で、 configure_file() の使用が提案されているこの質問を見つけましたが、それは外部 configfile パーサー スクリプトを呼び出す方法に対応していません。