2012-04-20 12 views
0

私はmakefileを作っていますが、現在のディレクトリにREADMEという名前のファイルが存在するかどうかを調べる依存関係のない作業をしています。 lessまたはelse quitelyを使用します。エラーはまったくありません。ターゲットを実行するコマンドは、この場合、コンソールには何も表示しません。Wordが予期しない( ")")メイクファイルで

read : 
    ifneq ("$(wildcard README)","") 
     [email protected]$(PAGER) README 
    endif 

そしてまた、このコードで

read : 
    [email protected] file in *;\ 
    do \ 
     if [ ${file} == "README" ]; then\ 
      $(PAGER) "README" ;\ 
     fi;\ 
    done 

と:(PAGERは、単に以下に等しいVARである)

は、私はいくつさまざまな方法を試してみたが、何も実際に動いていないようにみえ最初のチャンク私は/ bin/shに似たエラーが出てきます。構文エラー:予期せぬ単語(expecting ")")と私の人生の間、私はそれが何を言っているのか分かりません。私は確かに構文エラーがあるとは思わない、おそらく私は誤って使用しています。

後者のコードでは、==に対して予期しない演算子エラーが発生します。私はまた、これらの2つのライナー・ソリューションのような単純なものを試してみましたが、同様のエラーを取得しました

[email protected] -a README && less README 
[email protected][ -a README ] && less README 

任意の助けいただければ幸いです。

EDIT:私はさらに掘り下げて、有望なものを/ bin/bash(SHELL:=/bin/bash)に明示的に設定しました。

+0

@LubošTurekタグを削除する前に、どのように使用されているかについてウィキを確認する必要があります。現在、UNIXコマンドとして「less」の使用法が言及されています。 http://stackoverflow.com/tags/less/info – fedorqui

答えて

1
read: 
     @if [ -e README ]; then less README; fi 
+0

これで解決します。私はなぜ私がしたことが問題を投げていたのか、興味があります。それは機能的に私と同じですが、==演算子は明らかに同様に消化されません。 – Wuzseen

+0

'[' 'コマンド' test'だけです。 'test'は' == 'ではなく、等価比較のために '='演算子を使います。 –

+0

@Wuzseen、あなたの最初の解決策は間違いなく私のために働いていますが、READMEが存在しないときはターゲットのために何もする必要がないと言います(これを修正する方法があります)。 '$ '(' $ '=>' $$ ')を二倍にすると、2番目の解決法が機能します。そうしないと、' $ {'は何も解釈されず、すべてが崩れます。あなたの3番目と4番目はうまくいかず、そうしてはいけません。 – Beta

1

別の* .shファイルでシェルコードを抽出して、makefileのコマンドとして指定できるようにしてください(* .shファイルが実行可能であることを確認してください)。

+0

これは素晴らしいアイデアです。私はそれを撃つだろう。 – Wuzseen

+0

ベータ版では、makefile内で解決する答えを私に提供しましたが、これはかなり創造的です。しかし、譲渡規則に違反している可能性があります。 – Wuzseen