2017-12-08 9 views
3

GNU makeでは、ターゲットAが2つのターゲットBとCに依存しているが、ターゲットCを使用してビルドする場合、ターゲットBはすでにビルドされている必要があります(ターゲットC自体はBに依存しません)。 - のみ前提条件。GNU Makefileの注文専用前提条件はCMakeで利用可能ですが、そうでない場合、代替オプションは何ですか?

CMakeには代替手段がありますか?私はCMakeが単なる設定ツールであることを知っています。そのため、質問は「CMakeLists.txtをオーダーのみの前提条件でMakefileを生成するように書くことができますか?

代替ソリューションも歓迎します。どんな助けもありがとう。

答えて

2

注文専用の前提条件を使用する典型的なケースは、ディレクトリがいくつかのmakeルールで使用される前に準備されていることを確認することです。通常、cmakeは、その下にあるすべてのターゲットのディレクトリを管理します。あなたが実際にいくつかのディレクトリが必要な場合しかし、あなたはこのようなカスタム・ターゲット・コマンドを使用することができます。

add_custom_target(build-time-make-directory ALL 
    COMMAND ${CMAKE_COMMAND} -E make_directory ${directory}) 

このターゲットは、それが常に構築されますので、「出力なしで」ですが、それに依存するターゲットはしません必然的に再建される。

mkdirに限定されない。ここでは別の例である:

add_executable(qqexe qq.c) 
add_custom_target(_custom_target COMMAND touch pp.c COMMENT pp) 
add_dependencies(qqexe _custom_target) 

あなたがを実行するたびにを作り、pp.cのタイムスタンプが更新されますが、qqexeqq.cのタイムスタンプが変更されない限り、再構築されることはありません。

+1

ありがとうございます。それは私がCMakeをよく理解するのに役立ちます。 **他のターゲットが再構築されない例がありますか?あるいは、Bを最初にビルドしてからAをビルドしたい場合はCをビルドする必要があるかもしれないが、Bのソースファイルが更新されていてもBをビルドする必要はない(C **自体**はBに依存しないため)。事前に多くの感謝。 –

+0

私は契約を提案します:あなたはCMakeLists.txtを投稿します。このCMakeLists.txtは、いくつかのターゲットの不要な再構築を行います。このスクリプトをどのように修正できるかを示します。 –

関連する問題