V2EX = way to explore
V2EX 是一个关于分享和探索的地方
Sign Up Now
For Existing Member  Sign In
liyongjun0803
V2EX  ›  问与答

Makefile 依赖中的变量展开问题

  •  
  •   liyongjun0803 · Dec 16, 2020 · 1552 views
    This topic created in 1961 days ago, the information mentioned may be changed or developed.

    Makefile:

    TARGET = test1
    TARGET += test3
    
    all: $(TARGET)
    	@echo $^
    	@echo $(TARGET)
    
    test1:
    test3:
    
    TARGET += test2
    

    执行结果:

    $ make
    test1 test3
    test1 test3 test2
    

    Makefile 中,等号赋值的变量,会在整个 Makefile 文件展开后,再决定变量的值,如 @echo $(TARGET) 打印 test1 test3 test2 。
    但是,不解的是,为什么依赖中的 TARGET 仅仅为 test1 test3 ?

    2 replies    2020-12-17 09:26:24 +08:00
    SJ2050cn
        1
    SJ2050cn  
       Dec 16, 2020   ❤️ 1
    make 会先从上向下执行所有没缩进的语句,注意,是从头上下,在执行依赖项的时候,后面的赋值语句还没执行,接着,会执行缩进中的内容,所以你的 @echo $(TARGET)会执行全部赋值完后的结果。我们可以做一个小实验,
    ```
    Ranep = test1
    TARGET = $(Ranep) test3


    all: $(TARGET)
    @echo $^
    @echo $(TARGET)
    test1:
    test2:
    test3:

    Ranep = test2
    ```
    你可以看看输出结果你就知道了。总之,就是 make 会先执行没缩进的,再执行缩进的。
    liyongjun0803
        2
    liyongjun0803  
    OP
       Dec 17, 2020
    @SJ2050cn 学到了,感谢!
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   2455 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 30ms · UTC 05:14 · PVG 13:14 · LAX 22:14 · JFK 01:14
    ♥ Do have faith in what you're doing.