問題タブ [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.

0 投票する
1 に答える
900 参照

cmake - add_custom_command が機能しない

add_custom_command の使用法を理解しようとしています。次のような最小限のメイク ファイル (CMakeLists.txt) を作成しました。

$cmake.

$makeperfecthash.cpp作成されているのが見えず、ビルドが壊れる

$cmake .

$make

以下のエラーを与える

0 投票する
2 に答える
5130 参照

cmake - Cmake: 変数の内容に基づく add_custom_command 引数

いくつかのバイナリを特定の場所にコピーするための Cmake 関数が必要です。これには、次の関数定義があります。

そして、次の使用法:

プロジェクト ツリー内に target_1、target_2、および target_3 が定義されています。これを念頭に置いて、次の Cmake configure 出力を得ました。

binary_copy.cmake:15 (add_custom_command) での CMake 警告 (dev):

ポリシー CMP0040 が設定されていません: add_custom_command() の TARGET 署名のターゲットが存在する必要があります。ポリシーの詳細については、「cmake --help-policy CMP0040」を実行してください。cmake_policy コマンドを使用してポリシーを設定し、この警告を抑制します。

このコンテキストでは、そのターゲットは不明のようです...しかし、それは存在し、タイプミスはありません。ここでの問題は何ですか?

0 投票する
2 に答える
4079 参照

c - print を使用した CMake ビルド後の出力コマンド

CLion 1.2 を使用して、STM32 ターゲット用の組み込み C プロジェクトをビルドしています。GNU ARM ツールを使用したクロス コンパイルはうまく機能しarm-none-eabi-sizeますが、実行可能ファイルがビルドされた後に実行し、そのコマンドの出力をビルド出力ウィンドウに出力したいと考えています。

マクロを徹底的に調べましたがadd_custom_command、出力ファイルを生成するつもりはありません。これは、マクロが実行しているように見えます。

以下は、CMakeLists.txt私がプロジェクトで使用しているものです。

arm-none-eabi-sizeコンソールで実行すると、次のように表示されます。

それを実行して、その出力をビルド ウィンドウに表示するにはどうすればよいでしょうか。

ありがとう!

0 投票する
2 に答える
3469 参照

linux - CMake: add_custom_command(...) で if 条件を使用する方法

add_custom_command(...) によって CMakeLists.txt の if 条件を Linux で使用したいのは、これらの if 条件を実行し、makefile で判断を行う必要があるためです。このような:

使いたい場合はどうすればいいですか

いつmakefileを作るのですか?助けてくれてどうもありがとう!

0 投票する
1 に答える
3585 参照

cmake - add_custom_command を使用して、ジェネレータ式を使用して dll をコピーする方法は?

コンパイル時にソリューションの dll をコピーする必要があるため、次のように add_custom_command を使用しています。

cmakelist.txt で、上記の関数を次のように呼び出しています。

しかし、私は次のようにエラーが発生しています:

それで、qt関連のものがインストールされている場所に到達できないのか、それとも add_custom_command ジェネレーター式で間違いを犯しているのでしょうか? 関数を非常に一般的なものにして、ソリューションで取得したい dll がコンパイル中にターゲット内に配置されるようにしたいと考えています。

0 投票する
1 に答える
413 参照

cmake - 既存の最上位ターゲットへのcmake bind customコマンドが失敗する

トップレベルのカスタム ターゲットが 1 つあり、custom_command を追加/バインドすることでこの既存のターゲットを拡張できるネストされたサブモジュールが必要です。今のところ、私は問題に直面しています:add_custom_command(TARGET target_name ...)ターゲットが定義されているファイルで使用されていない場合 (ターゲットは最上位の CMakeLists.txt で定義されています)、この custom_command は単純に無視されます。

詳細:

1) 最上位の CMakelists.txt で作成されたcustom_target

2)サブディレクトリ「sub」には、カスタムコマンドで既存のターゲットを拡張できることを望んでいた他のCMakeLists.txt(モジュール)があります。

3)ビルドディレクトリを作成して実行すると

出力ファイルはcustom_target.txtcustom_command1.txtですが、 custom_command2.txtはありません。それが実際に私の問題です。

build/CMakeFiles/custom_tg.dir/build.makeを調べると、そこにはcustom_command2.txtについての言及がありません。build.makeファイルの内容は次のとおりです: http://pastebin.com/zVVS4sYL

実際、Cmake によって生成されたファイルのツリーにcustom_command2.txtに関する言及が見つかりません。これは私には奇妙に見えます。

あなたの助けを楽しみにしています。

0 投票する
1 に答える
327 参照

cmake - 別の add_custom_command に依存する add_custom_command

2 つのadd_custom_command節があり、一方が他方に依存しています。

  1. 最初のコマンドは、コンパイラを使用して.oslソース ファイルを.osoオブジェクト ファイルにコンパイルします。oslc

    への依存関係に注意してください。このコマンドを実行する前に存在することを確認する必要があるため、${oslc}明示的に依存しています。${oslc}

  2. 2 番目のコマンドは、別の場所からコンパイラをコピーして、コンパイラを "ビルド" (実際にはデプロイ) しoslcます。

    /li>

.oslこのセットアップは機能しますが、入力ファイルが変更されていない場合でも、両方のコマンドが常に実行されるという副作用があります(2 番目のコマンドの後に最初のコマンドが続きます) 。

この動作は Windows に固有のようです。Linux では問題なく動作するようです。

への依存関係が${oslc}最初のコマンドから削除された場合、2 番目のコマンドは、oslcコンパイラが見つからない場合でもまったく実行されなくなります。しかし一方で、.oslファイルは、最後のビルド以降に変更された場合にのみ、必要に応じて (存在する限りoslc) 再コンパイルされるようになりました。

この設定に何か問題はありますか?そうでない場合、両方の機能を組み合わせる正しい方法は何ですか:前回のビルド以降にファイルが変更された場合にのみ.oslファイルをコンパイルし、コンパイラがまだ存在しない場合はコンパイラ (最初のステップで必要)を「ビルド」しますか?oslc

実際の CMake スクリプトは GitHub で入手できます。

0 投票する
1 に答える
1452 参照

cmake - 失敗時に add_custom_command が再実行されない

CMakeでは、失敗する可能性add_custom_command(... POST_BUILD ...)のある aで使用したいと考えています。COMMAND

観察

  1. の終了コードが ではないため、最初の実行makeは失敗します。--> これは私が期待するものです。add_custom_command( ... COMMAND exit 1)0
  2. makeで指定されたコマンドは再度実行されないため、2 回目の実行はパスしadd_custom_commandます。--> これは私が望んでいるものではありません。makeカスタムコマンドが機能するまで失敗したいと思います。

最小限の失敗の例

質問

  1. この問題を解決するにはどうすればよいですか?
  2. これは CMake の意図した動作ですか?

1 つのソリューション

ではなく、成功時POST_BUILDにファイルを出力するカスタムコマンドを作成できることを認識しています。TARGET.passedただし、これは避けたいと思います。ここでは POST_BUILD が最も適切な使用法と思われるためです。(結果のファイルの機能を変更しています。)