[英]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.