我维护了一个提供makefile for Arduino
的项目有一个master(common)makefile,用户创建一个小的makefile,在那里设置某些环境变量,然后包含master 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
最近,我debugging a bug然后发现,如果在BOARD_TAG
环境变量的末尾有一个额外的空格,那么它会导致错误,这对某些人来说不是很直观固定。
我最初的想法是通过修改makefile中的环境变量来修复它。但第二个想法我不确定这是否是解决这个问题的正确方法。
所以我的问题是在makefile中修复这些用户输入问题的推荐方法是什么?我应该尝试修剪它还是有其他方法来解决这个问题?
答案 0 :(得分:2)
要修改“就地”变量,只需将其视为simply expanded variable:
BOARD_TAG = atmega328
BOARD_TAG := $(strip $(BOARD_TAG))
如果你使用“=”,它是一个递归扩展变量,所以右边的任何表达式(例如$(strip ...)
)都不会扩展,直到评估变量本身为止;如果你试图将变量本身放在右边,Make会警告你那个表达式无法被评估,因为它会进入无限循环。
如果使用“:=”,它将成为简单扩展的变量; Make然后在那里扩展右侧,将结果分配给变量,就是那个。