簡體   English   中英

如何在目標Makefile中設置多個變量

[英]How to set multiple variables in target makefile

我有一個問題。 我不能根據目標設置多個變量。 我需要設置兩個變量,例如,如果makefile已使用選項cpp(目標)運行,則應設置兩個變量,但我只能設置一個變量(CC)。 但是另一個保留為默認值。

cpp:EXTENSION=cpp
cpp:CC=g++
cpp:COMPILE

請協助解決這個問題。

我不能根據目標設置多個變量。

GNU Make中 ,這通常是通過分析$(MAKECMDGOALS)變量的內容,然后根據指定的目標設置變量來實現的。

例如,一個Makefile:

ifeq ($(filter cpp,$(MAKECMDGOALS)),cpp)
MSG=make cpp was called!
endif

ifeq ($(filter notcpp,$(MAKECMDGOALS)),notcpp)
MSG=make notcpp was called!
endif

all:
        @echo possible targets: cpp, notcpp; false

notcpp cpp:
        @echo $(MSG)

運行make cpp會打印出make cpp was called!

運行make notcpp將打印make notcpp was called!

(解釋ifeq ($(filter cpp,$(MAKECMDGOALS)),cpp)構造。 $(filter)函數在列表中查找單詞(第一個參數cpp )(第二個參數$(MAKECMDGOALS) )。如果找到該單詞,則返回該單詞;否則,返回一個空字符串;然后, ifeq$(filter)函數的結果與所需單詞進行比較:如果相等,則將解析/執行直到endif的塊。 ,可以編寫ifneq ($(filter cpp,$(MAKECMDGOALS)),)來測試$(filter)的結果不是空字符串。有關更多信息,請參見GNU Make文檔中的$(filter)ifeq 。另外,關於常規函數語法以及如何調用自定義函數 。)

另一種可能是使用多個Makefile。 在主Makefile中,根據目標,將控件傳遞給特定於目標的Makefile,例如:

cpp notcpp:
    $(MAKE) -f Makefile.$@ all

使用特定於目標的包含也是一種流行的選擇。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM