私は、CMakeの$<xxx:yy>
のようなgenerator expressionsの利点をいつ、どのように使用するのか、長い間理解しています。 誰かがそれを明確に説明できる例がいくつかあります。 多くの方が先にありがとうCmakeジェネレータの表現
4
A
答えて
3
CMakeはプロジェクト内のCMakeLists.txt
ファイルを「構成フェーズ」と最初に解析し、「生成フェーズ」という名前のビルド環境を生成します。
だから基本的にはジェネレータ式は発電機のみが知ることができるすべてのためのものである:
- ターゲット出力の名前とパス(クロスコンパイルおよびマルチコンフィギュレーション環境で主にとき)
- 以上、一般的に発電機が一緒に、コンパイラ/リンカを付き合うために評価任意のtargetプロパティは、ここで
を呼び出して、私は私のプロジェクトでジェネレータ式を使用する例を示します。
次の実行にファイルをコピーする(
CMAKE_CURRENT_BINARY_DIR
のようなマルチコンフィギュレーション環境であなただけ使用することはできません変数)add_custom_command( TARGET library1 POST_BUILD COMMAND ${CMAKE_COMMAND} -E copy "$<TARGET_FILE:library1>" "$<TARGET_FILE_DIR:mainProject>/$<TARGET_FILE_NAME:library1>" )
CMake post-build-event: copy compiled libraries
add_custom_command( TARGET myBinary POST_BUILD COMMAND ${CMAKE_COMMAND} -E copy "${CMAKE_CURRENT_SOURCE_DIR}/myTest.txt" "$<TARGET_FILE_DIR:myBinary>/myTest.txt" )
差別例えば
DEBUG
またはRELEASE
構成TARGET_PROPERTY
ジェネレータ式でadd_compile_options("$<$<CONFIG:DEBUG>:/MDd>")
For Cmake, can you modify the release/debug compiler flags with `add_compiler_flags()` command?
Modern way to set compiler flags in cross-platform cmake project
あなたは、例えば多くのことを行うことができます
file(GENERATE OUTPUT "includes.txt" CONTENT "$<TARGET_PROPERTY:motor,INCLUDE_DIRECTORIES>\n" )
CMake doesn't pick up INTERFACE_INCLUDE_DIRECTORIES of linked library
関連する問題
- 1. ジェネレータ式でcmakeオプションを使用する
- 2. ジェネレータ表現のためのPythonのPEP 484型アノテーション
- 3. 特定のcmakeジェネレータの式をadd_custom_targetに追加する方法
- 4. CMakeLists.txt内のCMakeジェネレータをエスケープする方法
- 5. cmake Xcodeジェネレータが作成できないプロジェクトを作成する
- 6. CMake "NMake Makefiles"ジェネレータがコンパイルに失敗する
- 7. リストの理解とジェネレータ表現の奇妙な時間の結果?
- 8. このジェネレータ表現関数がループバージョンより遅いのはなぜですか?
- 9. このPythonジェネレータ表現を短縮する方法はありますか?
- 10. 新しいジェネレータで既存のCMake変数を再利用する方法
- 11. CMake Xcodeジェネレータはサポートされていないオプションを使用しています
- 12. XcodeがLinux上でCMakeジェネレータとしてリストされていない
- 13. CMake小文字を大文字に変換する正規表現
- 14. ジェネレータ `
- 15. アプリケーションIDジェネレータとデータベースIDジェネレータの使用
- 16. cmake - プロジェクト内に他のクラスファイルを表示
- 17. CMakeの:CMakeのでは
- 18. 正規表現の正規表現の正規表現
- 19. Scala.jsのJavascriptジェネレータ
- 20. Javascriptジェネレータのキャッチエラー
- 21. textviewsの行ジェネレータ
- 22. ジェネレータのStopIteration
- 23. LinuxでのC++開発でのソースとビルドに関するアドバイス(CMakeとしてのジェネレータ)
- 24. Python/Scalaでの表現の表現
- 25. cmakeから現在のMSbuildを実行するには?
- 26. 変換リスト(ジェネレータa)をジェネレータ(リストa)
- 27. 並列コンパイルのためにQT Cmakeプロジェクト用のジェネレータを設定する方法はありますか?
- 28. 正規表現:表現
- 29. 正規表現表現
- 30. 正規表現表現
'誰もが、それはclearly'説明することができます - 広すぎます。誰かが[CMakeのドキュメント](https://cmake.org/cmake/help/v3.9/manual/cmake-generator-expressions.7.html)を繰り返すべきですか?または他のマニュアル?そうでない場合は、**あなたが理解していないもの、例えば**を説明してください。どの表現か、またはどの例か。 – Tsyvarev
@Tsyvarev –
'$'は、ジェネレータ表現の使用量のほぼ半分であることを理解できなかった部分のドキュメントを追加しました。その意味は簡単です:ジェネレータ式 'xxx'がTRUE(ブール値)と評価された場合、ジェネレータ式yyの値が使用されます。それ以外の場合は、空の文字列が使用されます。この種の式の有用性は、左ジェネレータ式の値が設定オプションに依存し、ビルドシステムがマルチコンフィギュレーション(例えばVisual Studio)をサポートしている場合、具体的な設定が知られていないので、その式を 'if'で書き換えることはできません。この段階。 –
Tsyvarev