2

LaTeXドキュメントのmakefileを作成したいと思います(この最小限の例では)。ファイル「makeindexstyle.ist」がない場合は、(make makeindexstyle.istを実行して)作成し、インデックスのフォーマットに使用する必要があります。のルール %.pdfはこれを反映しています。ただし、まだ機能していないため、エラーが発生します

ifneq (, ) {
/bin/sh: 1: Syntax error: word unexpected (expecting ")")
make: *** [master.pdf] Error 2

どうしたの?

Parts from Makefile:

MASTER = master
TEX = slave

TEXI = texi2dvi -p

all: $(MASTER:=.pdf)

%.pdf: %.tex $(TEX:=.tex)
    ifneq ($(wildcard makeindexstyle.ist), ) { # if makeindexstyle.ist exists, compile and build index
        $(TEXI) $<
        make makeindexstyle.ist
        makeindex -c -s makeindexstyle.ist $(MASTER:=.idx)
    }
    endif
    $(TEXI) $<

makeindexstyle.ist:
    @(echo "...") > makeindexstyle.ist

更新:エラーの原因をできるだけ簡単に確認できるようにしました。とりわけ(引用など)、私はこれを試しました:

%.pdf: %.tex $(TEX:=.tex)
    exist := $(wildcard "absolute-path-to-makeindexstyle.ist")
    ifneq ($strip $(exist)),)
             echo "foo"
    endif
    $(TEXI) $<

しかし、結果は

exists := 
make: exists: Command not found
make: *** [book.pdf] Error 127
4

2 に答える 2

2

その間、私はシェル側でそれを解決することができました:

IDX = "makeindexstyle.ist"
%.pdf: %.tex $(TEX:=.tex)
    @if test -f $(IDX); then \
        echo "foo"; \
    fi
    $(TEXI) $<
于 2012-10-09T07:09:26.253 に答える
-1

これは、ファイルがMakefileに存在するかどうかを確認するにはどうすればよいですか?の複製のように聞こえます。またはファイルが存在するかどうかをテストしてMakefile変数を条件付きで設定する方法

試す

ifneq ($(wildcard makeindexstyle.ist),)

スペースなし。あるいは、""議論を捨てますか?

于 2012-10-08T22:01:27.543 に答える