makefile内部调用target

时间:2010-05-02 14:46:15

标签: makefile target

我如何区分makefile,哪些目标以及内部调用它们(何时)?我有一个包含多个目标的makefile,它们实际上是变量。

UPD:这是一个例子

build_dir := $(bin_dir)/build

xpi_built := $(build_dir)/$(install_rdf) \
             $(build_dir)/$(chrome_manifest) \
             $(chrome_jar_file) \
             $(default_prefs)/*

xpi_built_no_dir := $(subst $(build_dir)/,,$(xpi_built))

.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): $(build_dir) $(xpi_built)
    @echo "Creating XPI file."
    @cd $(build_dir); $(ZIP) -r ../$(xpi_file) $(xpi_built_no_dir)
    @echo "Creating XPI file. Done!"
    @cp update.rdf $(bin_dir)/
    @cp -u *.xhtml $(bin_dir)/
    @cp -Rf $(default_prefs) $(build_dir)/; \

$(build_dir)/%: %
    cp -f $< $@

$(build_dir):

    @if [ ! -x $(build_dir) ]; \
  then \
    mkdir $(build_dir); \
  fi

1 个答案:

答案 0 :(得分:2)

如果在命令行上指定目标,则在make clean Make中将尝试构建该目标。如果你不这样做(也就是说,如果你只是运行make),Make将尝试构建默认目标;默认目标是makefile中的第一个目标(在您的情况下为install),除非您使用.DEFAULT_GOAL变量将其设置为其他目标。

当Make尝试构建目标时,如果需要,它首先构建该目标的先决条件。 (何时需要?当目标是不存在的文件或目录时(除非它是.PHONY,但这是一个高级主题),或者其中一个先决条件比目标更新(除非它是“仅订购“,但这是一个高级主题))。因此,如果Make正在尝试构建您的all,它将首先尝试构建$(build_dir)$(xpi_built),这些已在makefile的其他位置定义。

如果你想弄清楚Make会做什么以及何时做,你可以使用一些技巧。例如,您可以运行make -n,而Make会告诉您它将做什么,而不是这样做。或者你可以在规则中输入@echo now making $@这样的命令来告诉你它正在做什么。或者更多信息:

some_target: preq another_preq and_another
    @echo Making $@. The prerequisites are $^. Of those, $? are newer than $@.
    other_commands...