How can I use .NOTPARALLEL in makefile only on specific targets?

后端 未结 2 689
Happy的楠姐
Happy的楠姐 2021-01-03 05:52

I have 5 labels in Makefile:

all: label1 label2 label3 label4 last_label

I want last_label to be done last, and I want to use

相关标签:
2条回答
  • 2021-01-03 06:18

    Create a target specifying the four targets that can be executed in parallel & include this and last_label in the all target:

    intermediate: label1 label2 label3 label4
    
    all:
            $(MAKE) intermediate
            $(MAKE) last_label
    

    This would execute the targets specified within intermediate in parallel, but intermediate and last_label would be forced consecutively.

    (Note that the leading space before $(MAKE) is a TAB character.)

    0 讨论(0)
  • 2021-01-03 06:36

    If the reason last_label needs to run last is that it needs data from the other labels, the best approach would be to tell make about that dependency:

    all: last_label
    
    last_label: label1 label2 label3 label4
    

    If there's not a true dependency (i.e., if you don't want last_label to be rebuilt if one of the others changes), and if you're using GNU Make, you can specify these as "order-only" dependencies--make will just make sure they exist before last_label is built:

    all: last_label
    
    last_label: | label1 label2 label3 label4
    
    0 讨论(0)
提交回复
热议问题