2016-08-11 4 views
0

として、暗黙的なパターンを設定する方法:GNUは作る - 私はこの暗黙のルールを持っている前提

%.so: %.so.5 
    qnx_ln $< [email protected] 

は、私は別の目標のために、私はすべての.soは、そのターゲットのための前提条件をファイルにするために持っていることに気づきました。

私はこの試みた:

makegen: $(TEAM_ROOT)HMI_FORGF/src/src.pro module_dirs %.so 
    ... 

をしかし、私は、出力

*** 'makegen' で必要なターゲットは '%の.so' を作るためにはありませんルールを得ました。やめる。

+0

ビルド時に存在しない場合、どのような.soファイルが必要かをどのように知ることができますか?あなたは基本的に "makegenのためにいくつかの.soファイルが必要です"と言っています。必要なすべての.soファイルの名前を含む変数を与える必要があります。 – Tim

+0

%.soターゲットは、次のように変換できます。「あなたが満たすすべての.soファイルについては、それが必要です。ここでは、makegenのターゲットは "makegenの場合は、そのファイルと.soファイルが必要です"となります。それは意味をなさない – Tim

+0

[Makefileターゲットを設定する方法はパターン前提条件に依存しますか?](https://stackoverflow.com/questions/39829344/how-to-set-a-makefile-target-depend-on - パターン前提条件) –

答えて

2

%前提パターンは、それらがターゲットの各%一部と一致する静的および暗黙パターンルールのみを使用することができます。通常の規則で使用される場合、%はリテラル文字です。

特定のソースファイル名と.soファイル名の間に何らかの対応がない限り、依存関係をそのまま指定する必要があります。.soファイルを最初にリンクしていると思われます。

0

以前に指摘したように、これは必須のパターンの仕組みではないため、これを行うことはできません。たぶん、あなたは、次の思考を与え、それを拒否したが、私はあなたが以下のクローズ十分なフィットを見つけるかもしれない疑い:

%.so.target: %.so.5 
     echo $< >> $(BUILD)/so.targets 

SO_TARGETS=$(basename $(shell cat $(BUILD)/so.targets)) 

makegen: $(TEAM_ROOT)HMI_FORGF/src/src.pro module_dirs $(SO_TARGETS) 
0

はたぶん、あなたはすべての既存の* .soのファイルにマッチするルールを探していますか?

makegen: $(TEAM_ROOT)HMI_FORGF/src/src.pro module_dirs $(wildcard *.so) 
    ... 

パターンがある場合は、まだそれらのファイルを生成していない* .soというファイルを生成し、彼らは(明らかに)単に既存のファイルを調べて、ワイルドカードでマッチされることはありませんでした。それが実際に達成したいことなら、おそらく、実際のファイルを何らかの方法で列挙したいと思うでしょう。

関連する問題