0

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
4

1 に答える 1

2

コマンド ラインでターゲットを指定すると、make cleanMake はそのターゲットをビルドしようとします。そうでない場合 (つまり、 を実行しただけの場合make)、Make はデフォルトのターゲットをビルドしようとします。デフォルトのターゲットは、変数を使用して別のターゲットにinstall設定しない限り、makefile の最初のターゲットです (あなたの場合は)。.DEFAULT_GOAL

Make がターゲットをビルドしようとするとき、必要に応じて、最初にそのターゲットの前提条件をビルドします。(必要になるのはいつですか? ターゲットが実際には存在しないファイルまたはディレクトリである場合 (.PHONY高度なトピックである場合を除きます)、またはその前提条件の 1 つがターゲットよりも新しい場合 (「順序のみ」でない限り、しかし、それは高度なトピックです))。したがって、Make が をビルドしようとすると、all最初に、makefile の他の場所で定義されている と をビルドしようとします。$(build_dir)$(xpi_built)

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...
于 2010-05-02T15:17:39.423 に答える