スペースを含むメイクファイルとパス名はうまく混合されません。 Makeは空白を使用して文字列をリストに分割します。たとえば、あなたがこの書き込み:
SOURCES = foo.c bar.c baz.c
OBJECTS = $(patsubst %.c,%.o, $(SOURCES))
program: $(OBJECTS)
を次に変数を扱うSOURCES
とOBJECTS
としてリスト文字列の、空白文字で分割し、program
は3つの項目foo.o
、bar.o
、baz.o
に依存しますしますします。
Makeは、(パス名を参照するため)このように分割しないでください。多くの初期のスクリプト言語と同様に、完全に文字列補間に基づいています。これは、ビルドステップの作成にも使用されるシェルスクリプトのフラグメントにも当てはまります。
いくつかの回避策がありますが、すべてが変数がメイクファイル内でどのように使用されているかによって異なります。再帰的makefileは、これらの変数の内容が、シェルを使用して呼び出されたmakeコマンドに明示的に渡された場合、追加の問題を引き起こす可能性があります。
install: program
$(INSTALL) -m 755 program $(DESTDIR)$(bindir)/program
このように、引用符を追加するのに十分であり得る:このようなインストールルールがある場合ので、いくつかのケースでは
、修正は、かなり単純です
install: program
$(INSTALL) -m 755 program "$(DESTDIR)$(bindir)/program"
しかし、これは本当に問題のmakefileに依存します。
プロジェクトでautomake(libserialport
など)を使用している場合、最も簡単な解決策は、生成されたmakefileでDESTDIR
のサポートを使用して、スペースを含まないパスにすべてをインストールした後、 。これは、プロジェクトが最終的なインストールパスを内部的に埋め込んでいないことを前提としています。
あなた自身でメイクファイルを書きましたか?どこかに投稿できますか? –
いいえ、私は 'libserialport'ライブラリ(https://sigrok.org/wiki/Libserialport)をビルドしようとしています。私は彼らのウェブサイトにある '。/ configure'、' make'、 'sudo make install'のようなビルドガイドに従っています –
以下は' Makefile'の接頭辞部分です –