title: XULSchool make: *** No rule to make target '../bin/build', needed by 'install'. Stop
body: <p>I'm working through the xulschool tutorial <a href="https://developer.mozilla.org/en-US/Add-ons/Overlay_Extensions/XUL_School/Setting_Up_a_Development_Environment" rel="nofollow">here</a></p>
  
  <p>Everything's going pretty well so far but I'm having trouble with the makefile they included. "make" works fine but "make install" throws the error:</p>
  
  <pre><code>"make: *** No rule to make target '../bin/build', needed by 'install'.  Stop."
  </code></pre>
  
  <p>I have never used make before but it looks like it wants some extra parameters that are not mentioned anywhere in the tutorial. Any help would be greatly appreciated.</p>
  
  <p>contents of the makefile:</p>
  
  <pre><code># 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 := XULSchool
  
  # The zip application to be used.
  ZIP := zip
  
  # The target location of the build and build files.
  bin_dir := ../bin
  
  # 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/\{$(extension_uuid)\}
    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
  
  # 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)
  
  # 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)
      @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!"
  </code></pre>