2017-07-20 10 views
0

パスとスペースを使ってインストール(sudo make install)したいです。 (例:/Applications/Sample App.app/Contents/Resourcesスペースとドットでパスを使ってインストールするには

ただし、次のエラーが発生しました。

ginstall: target 'App.app/Contents/Resources/lib/libserialport.a' is not a directory

私は唯一のスペースでパスを使用する場合は、sudo make installは本当に\エスケープ文字でうまく動作します。

+0

あなた自身でメイクファイルを書きましたか?どこかに投稿できますか? –

+0

いいえ、私は 'libserialport'ライブラリ(https://sigrok.org/wiki/Libserialport)をビルドしようとしています。私は彼らのウェブサイトにある '。/ configure'、' make'、 'sudo make install'のようなビルドガイドに従っています –

+0

以下は' Makefile'の接頭辞部分です –

答えて

1

スペースを含むメイクファイルとパス名はうまく混合されません。 Makeは空白を使用して文字列をリストに分割します。たとえば、あなたがこの書き込み:

SOURCES = foo.c bar.c baz.c 
OBJECTS = $(patsubst %.c,%.o, $(SOURCES)) 

program: $(OBJECTS) 

を次に変数を扱うSOURCESOBJECTSとしてリスト文字列の、空白文字で分割し、programは3つの項目foo.obar.obaz.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のサポートを使用して、スペースを含まないパスにすべてをインストールした後、 。これは、プロジェクトが最終的なインストールパスを内部的に埋め込んでいないことを前提としています。

+0

' sudo make install DESTDIR =/usr/local'のような 'DESTDIR'を使用しましたが、インストールディレクトリは' DESTDIR/prefix'に設定されました。 –

+0

申し訳ありません。あなたは言い換えることができますか? 'DESTDIR/prefix'は実際のディレクトリかプレースホルダですか? –

+0

私は 'DESTDIR' +' prefix'ディレクトリを意味しますが、 'prefix'とは別に' DESTDIR'ディレクトリにインストールしたいです –

関連する問題