1

親ディレクトリを「../bin」として参照しようとするサンプル プロジェクトのメイクファイルがあります。「make install」を実行すると、これは機能しないようです。私が得るエラーは次のとおりです。

cp: cannot stat `/bin/build/*': No such file or directory

プロジェクトのレイアウトは次のとおりです。

/置き場

/src/makefile

(したがって、makefile を実行すると、現在のディレクトリは /src/ になります)

親ディレクトリを「..」で参照するのは正しくないようです。現在のディレクトリを {$CURDIR} 変数で参照できることはわかっていますが、/bin/ が正しく参照されるように、適切な変数または親ディレクトリを参照する方法を知る必要があります。メイクファイルを移動することでこれを回避できると思いますが、将来の使用のためにこれを行う実際の方法を知りたいです。

メイクファイルは次のようになります (問題は ##### problem ###### で強​​調表示されます)。

# The name of the extension.
extension_name := xulschoolhello

# The UUID of the extension.
extension_uuid := helloworld@xulschool.com

# The name of the profile dir where the extension can be installed.
profile_dir := 8mtbjosv.development

# The zip application to be used.
ZIP := zip

# The target location of the build and build files.
bin_dir := ../bin ##### problem ######

# The target XPI file.
xpi_file := $(bin_dir)/$(extension_name)2.xpi

# The type of operating system this make command is running on.
os_type := $(patsubst darwin%,darwin,$(shell echo $(OSTYPE)))

# The location of the extension profile.
ifeq ($(os_type), darwin)
  profile_location := \
    ~/Library/Application\ Support/Firefox/Profiles/$(profile_dir)/extensions/\{$(extension_uuid)\}
else
  ifeq ($(os_type), linux-gnu)
    profile_location := \
      ~/.mozilla/firefox/$(profile_dir)/extensions/
  else
    profile_location := \
      "$(subst \,\\,$(APPDATA))\\Mozilla\\Firefox\\Profiles\\$(profile_dir)\\extensions\\{$(extension_uuid)}"
  endif
endif

# The temporary location where the extension tree will be copied and built.
build_dir := $(bin_dir)/build ##### problem ######

# This builds the extension XPI file.
.PHONY: all
all: $(xpi_file)
    @echo
    @echo "Build finished successfully."
    @echo

# This cleans all temporary files and directories created by 'make'.
.PHONY: clean
clean:
    @rm -rf $(build_dir)
    @rm -f $(xpi_file)
    @echo "Cleanup is done."

# The sources for the XPI file.
xpi_built := install.rdf \
             chrome.manifest \
             $(wildcard content/*.js) \
             $(wildcard content/*.xul) \
             $(wildcard content/*.xml) \
             $(wildcard content/*.css) \
             $(wildcard skin/*.css) \
             $(wildcard skin/*.png) \
             $(wildcard locale/*/*.dtd) \
             $(wildcard locale/*/*.properties)

$(build_dir) $(xpi_built): $(xpi_built)

# This builds everything except for the actual XPI, and then it copies it to the
# specified profile directory, allowing a quick update that requires no install.
.PHONY: install
install: $(build_dir) $(xpi_built)
    @echo "Installing in profile folder: $(profile_location)"
    @cp -Rf $(build_dir)/* $(profile_location)     ##### problem ######
    @echo "Installing in profile folder. Done!"
    @echo


$(xpi_file): $(xpi_built)
    @echo "Creating XPI file."
    @$(ZIP) $(xpi_file) $(xpi_built)
    @echo "Creating XPI file. Done!"

Linux Mint 12 で GNU Make 3.81 を使用しています。

ありがとう。

の出力

@echo "Installing in profile folder: $(profile_location)"
    @echo ${build_dir}
    @echo ${profile_location}

は :

Installing in profile folder: ~/.mozilla/firefox/8mtbjosv.development/extensions/
../bin/build
/home/owner/.mozilla/firefox/8mtbjosv.development/extensions/
4

3 に答える 3

0

$(profile_location)宛先フォルダーが存在し、書き込み可能であることを確認する必要があると思います。また、行末が適切な Linux 形式 (\n) であることを確認してください。現時点では、他のエラーを見つけることができません。

于 2012-04-29T20:04:44.453 に答える
0

../bin が実行中の場所ではなく、makefile の場所に相対するように実行されている場合はどうなりますか? make clean が機能する場合は、その兆候である可能性があります。詳細な出力を提供するコンパイラ オプションを探し、そこに "pwd" ステートメントを配置して、それがどのように解決されるかを確認します。

于 2012-04-29T20:06:07.730 に答える