1

我维护一个为 Arduino 提供makefile的项目

有一个主(通用)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

最近在调试一个bug,然后发现如果BOARD_TAG环境变量的末尾有一个额外的空格,那么就会导致错误,这不是很直观的人来修复。

我最初的想法是通过修剪 makefile 中的环境变量来修复它。但转念一想,我不确定这是否是解决此问题的正确方法。

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

4

1 回答 1

3

要“就地”修剪变量,只需将其视为简单扩展的变量

BOARD_TAG = atmega328

BOARD_TAG := $(strip $(BOARD_TAG))

如果你使用“=”,它是一个递归扩展变量,所以右边的任何表达式(例如$(strip ...))在变量本身被评估之前都不会被扩展;如果您尝试将变量本身放在右侧,Make 会警告您无法评估该表达式,因为它会进入无限循环。

如果你使用“:=”,它就变成了一个简单的扩展变量;Make 扩展右侧,然后将结果分配给变量,就是这样。

于 2013-06-08T12:01:31.333 回答