3

MinGW システムを使用して Xindy をコンパイルする作業を行っています。dmake常にエラーで死ぬので、Makefile の数行に絞り込みました。これで dmake を実行してみてください:

SHELL = /bin/sh
some-target:
    target=`echo info-recursive | sed s/-recursive//`;

MinGW シェルの代わりに通常の Windows CMD を使用している場合は、SHELL 変数の場所を「C:/MinGW/msys/1.0/sh.exe」などを指すように変更する必要があります。とにかく、上記は失敗します:

CreateProcess failed (2).
dmake: Error executing 'bin/sh /S /c "target=`echo info-recursive | sed s/-recursive//`;"': No such file or directory
dmake: Error code -1, while making 'some-target'

sed と sh がインストールされ、正常に動作します。エラーメッセージ自体の出力として指定されたコマンドを実行しようとすると、次のようになります。

$ /bin/sh /S /c "target=`echo info-recursive | sed s/-recursive//`;"
/bin/sh: /S: No such file or directory

したがって、dmake(または何か)がシェル引数に「/S /c」を追加しているようで、bashはそれをファイル名と見なし、見つからないときに失敗します。

誰もこれを経験したことがありますか、またはこれを修正する方法を知っていますか?

4

1 に答える 1

2

dmakeのソース コードを簡単に調べると、$(SHELL)設定が遅すぎて起動時にまだ空であることが問題であることがわかります ( macros.mk、37 行目)。

11  .IF $(SHELL) == $(NULL)
...
15     SHELL *:= $(COMSPEC)
...
...
35  .IF $(SHELL) == $(COMSPEC)
36  .IF $(COMSPEC:lf) == cmd.exe
37     SHELLFLAGS       *:= $(SWITCHAR)S $(SWITCHAR)c

SHELL="C:/MinGW/msys/1.0/sh.exe"dmake コマンド ライン呼び出しに追加することで、この問題を回避できる場合があります。

(私は何年も dmake を使用していないので、ここで誤解されている可能性がありますが、IIRC の風味が少し異なる dmake で動作する自動没収された makefile のように見えるものを取得できれば感銘を受けます。 GNU makeなどを見つけてください。)

于 2012-09-04T23:12:57.793 に答える