2015-02-10 34 views
-1

我需要我的make才能在以下場景中工作。做make時,至少要設置flag_a或flag_b中的一個。未來還可能有flag_c。 化妝flag_a =真 或 化妝flag_b =真 或 化妝flag_a =真flag_b =真條件裏的目標在makefile中與命令一起

清理是簡單的 「使清潔」。無論在製作過程中設置哪個標誌,它都應該清除所有內容。

在我的makefile中,我想設置一個標誌設置變量,最後添加變量。如果變量總和爲0,則表示make中沒有設置標誌。在這種情況下,我想拋出一個錯誤並終止make。 我的makefile文件如下所示。

1 FLAG_A_SET = 0

2 FLAG_B_SET = 0

3所有:

4 IFDEF flag_a

5 FLAG_A_SET = 1

6 ENDIF

7 IFDEF flag_b

8 FLAG_B_SET = 1

9 ENDIF

10 FLAGS_SUM = $(殼回聲$(表達式 「$(FLAG_A_SET)」 + 「$(FLAG_B_SET)」))

11 IFEQ($ (FLAGS_SUM),0)

12片$(誤差必須指定flag_a中的至少一個和flag_b)

13別的

14片讓-C文件

15 ENDIF

然後我收到錯誤「命令,第一目標之前開始」,在第14行 我也有些懷疑語句線10是表達是否正確? 〜

回答

0

哎呀。你沒有理由希望以這種複雜的方式來做到這一點。如果你真的只是想知道,如果一個或多個一組變量具有任何價值,你可以更容易地將它:

ifeq ($(flag_a)$(flag_b),) 
    $(info no flag is set) 
else 
    $(info one or more flags are set) 
endif 

基本上,你展開所有的標誌,看看結果等於空字符串或不。

ETA

如果你想避免這個檢查運行clean時,你可以看一下$(MAKECMDGOALS)變量,看都提供了哪些命令行目標,跳過此測試,如果它是clean

ifneq ($(MAKECMDGOALS),clean) 
    ifeq ($(flag_a)$(flag_b),) 
    $(info no flag is set) 
    else 
    $(info one or more flags are set) 
    endif 
endif 

您可以使用filter-out將其組合成單個測試,但它可能比它的價值更令人困惑。

+0

嗨MadScientist,解決了我的一個問題。我的標誌總和邏輯不再需要。現在我的文件如下所示:$(BUILDDIRS) 2(BUILDDIRS): 3 ifeq($(flag_a)$(flag_b),) 4 $(錯誤沒有標誌設置) 5 else 6 tab $ (MAKE)-C文件 7 endif。然後還有另一部分是乾淨的。現在當我乾淨的時候,我收到錯誤「*** no flag is set。Stop」。 – Vimt 2015-02-10 16:19:41

+0

感謝MadScientist。現在我所有的問題都解決了。 – Vimt 2015-02-11 08:06:44