2017-05-19 4 views
-1

私のMakefile.amは実行可能なメインを作成します: "symplerTest"ファイル "geometry/source/*。o"をリンクします。現在、このようにリンクしています。autotools:Makefile.am:ファイルが存在する場合はリンク

symplerTest_LDFLAGS = \ 
    ... 
    geometry/source/*.o 

これは機能します。しかし、次のステップでは、ファイル* .oが存在する場合にのみリンクしたいと思っています。私はこの1つを試してみました:

if ("$(wildcard $(geometry/source/*.o))","") 
symplerTest_LDFLAGS += geometry/source/*.o 
endif 

が、次のエラーメッセージが出ます:

srcUnittest/Makefile.am:81: error: endif without if 
srcUnittest/Makefile.am:79: warning: wildcard $(geometry/source/*.o: non-POSIX variable name 
srcUnittest/Makefile.am:79: (probably a GNU make extension) 

を問題は、( "$(ワイルドカード$(ジオメトリ/ソース/ * O))" であると思われます、 "")

ありがとうございました! 20 Conditionals

+1

私はこれがXY問題であると考えます。なぜAutomakeプロジェクトのリンカに '.o'ファイルを指定するのですか?これらは中間ビルドターゲットではありませんか?通常、どのオブジェクトが割り当てられているかを制御して、実行可能ファイルにリンクされているオブジェクトを制御し、Automakeに詳細を並べ替えるようにします。あなたの 'Makefile.am'が' .o'ファイルについて直接何かを言うならば、あなたは準最適なパスである可能性が非常に高いでしょう。 –

答えて

0

あなたが作る ディレクティブifeqでAutomakeのディレクティブifが混乱している、

Automakeのマニュアルを強調:

Automakeは条件文の単純型をサポートしています。

これらの条件は、GNU Makeの条件と同じではありません。 Automake 設定時にconfigureスクリプトによって条件がチェックされ、Makefile.inからMakefileへの変換 に影響します。これらは、configureに渡されたオプションである に基づいており、configureがホストシステムについて発見した結果に基づいています。 GNU Make条件はmake時にチェックされ、変数 に基づいてmakeプログラムに渡されるか、Makefileに定義されます。

ifはMakeディレクティブではありません。 ifeqは、有効な 引数の形式が(arg1, arg2)のMakeディレクティブです。作るために

ifeq (arg1, arg2) 

手段、arg1場合はarg2に等しいです。

(arg1, arg2)の形式の引数は、Automake指令ifでは無効です。 Automake ifディレクティブの有効な引数は、Automake条件名、 です。

if DEBUG 

手段は、Automakeは、からDEBUGによって名付けられた条件が真である場合 - DEBUGは、以前の手段によってAM_CONDITIONAL マクロの を作成した条件名です。

リンクされたドキュメントを参照してください。

+0

お返事ありがとうございます!だから私はただやりたいことをする可能性はないのですか? "ファイルが存在すればリンク"? –

+1

@mudi_louあなたの投稿に対するJohn Bollingerのコメントが適用されます。あなたがしようとしていることは、あなたが説明していない他のいくつかの問題に対する間違った解決策です。あなたは*その問題に関する新しい質問をするべきです。 –

関連する問題