修剪makefile中的环境变量

修剪makefile中的环境变量,makefile,user-input,Makefile,User Input,我维护一个提供 有一个主(公共)makefile,用户创建一个小makefile,在其中设置某些环境变量,然后包括主makefile 典型的makefile如下所示 # Arduino Make file. Refer to https://github.com/sudar/Arduino-Makefile BOARD_TAG = atmega328 ARDUINO_PORT = /dev/ttyACM* include $(ARDMK_DIR)/arduino-mk/Arduino

我维护一个提供

有一个主(公共)makefile,用户创建一个小makefile,在其中设置某些环境变量,然后包括主makefile

典型的makefile如下所示

# Arduino Make file. Refer to https://github.com/sudar/Arduino-Makefile 

BOARD_TAG    = atmega328
ARDUINO_PORT = /dev/ttyACM*

include $(ARDMK_DIR)/arduino-mk/Arduino.mk
最近,我发现,如果
BOARD_TAG
环境变量末尾有额外的空格,则会导致一个错误,这对于某些人来说不是很直观的修复方法

我最初的想法是通过修剪makefile中的环境变量来修复它。但经过再三考虑,我不确定这是否是解决这个问题的正确方法

所以我的问题是,在makefile中修复此类用户输入问题的推荐方法是什么?我应该尝试修剪它还是有其他方法来解决这个问题?

要“就地”修剪变量,只需将其视为:

如果使用“=”,则它是一个递归扩展变量,因此右侧的任何表达式(例如,
$(strip…
)在对变量本身求值之前都不会展开;如果您试图将变量本身置于右侧,Make会警告您该表达式无法计算,因为它进入无限循环


如果使用“:”,它将成为一个简单的扩展变量;Make在右侧展开,然后将结果赋给变量,就是这样。

是的,这似乎是合理的,是的,还有其他选择。您可以通过函数对其进行修剪。是否可以修剪变量并将结果存储在同一个变量中?我得到了
递归变量
BOARD\u TAG'引用本身(最终)`
BOARD_TAG = atmega328

BOARD_TAG := $(strip $(BOARD_TAG))