2013-07-18 23 views
0

我試圖做到這一點在我的Makefile:Makefile:如何使一個目標中計算出的宏值可用於另一個目標?

VAL= 

TARGET1: 
    VAL= ... #compute value of VAL 
    #run some command that uses the value of VAL 
TARGET2: 
    $(MAKE) TARGET1 
    #run other command that uses the value of VAL 

但事實證明,VAL的值時,重置目標!在TARGET2中完成。因此,當我嘗試在TARGET2中運行其他命令時,VAL的計算值不可用。有沒有辦法保持在TARGET1中計算的值?謝謝。

回答

0

你有一個根本的誤解。在TARGET1配方中設置的變量VAL根本不是make變量:它是一個shell變量。你可以告訴,因爲如果你改變了分配的語法爲別的,仍然是一個有效的補充變量賦值,但不是一個有效的shell變量賦值,如:

TARGET1: 
     VAL := foo 

它會給你一個語法錯誤。基本上在make中,任何配方行(以TAB字符開始的目標之後的行)都不會被make解釋:它們被傳遞給調用的shell。當然,在shell中發生的任何事情都不會影響make變量的值等。

你不給我們很多細節。您不會說該命令是使用環境中的變量還是通過命令行。你不會說你使用的是什麼版本。如果它是GNU make,你有很多選擇。最簡單的是始終設置值;如果需要shell語法,你可以使用shell功能:

VAL := $(shell #compute value of VAL) 

TARGET1: 
     #run some command that uses $(VAL) 
TARGET2: 
     #run another command that uses $(vAL) 

之前,我們給你更多的可能性,我們需要了解的要求:如果你已經有值TARGET1設置我們需要知道爲什麼,我們之前可提供可能的解決方案

相關問題