在代码中访问Makefile变量?

时间:2014-07-25 20:04:40

标签: c++ makefile arduino gnu-make

更新进度

对不起,我忘记将此问题指定为Arduino问题。我只是假设它是一个预处理器问题,它独立于正在执行的平台。

我正在使用Arduino-Make,我正在尝试传入USERNAME和PASSWORD

BOARD_TAG    = mega2560
CPPFLAGS     = -DUSERNAME="$(USERNAME)" -DPASSWORD="$(PASSWORD)"
include $(ARDMK_DIR)/Arduino.mk

命令行:

make USERNAME="HELLO" PASSWORD="WORLD"

代码:

void setup() {
  Serial.begin(9600);

  String auth_raw2(USERNAME : PASSWORD);
  Serial.println(auth_raw2);
}


void loop() {}

我收到此错误:

macro.ino:10:29: error: found ‘:’ in nested-name-specifier, expected ‘::’
macro.ino:10:20: error: ‘HELLO’ has not been declared

2 个答案:

答案 0 :(得分:1)

你想要的是

String auth_raw( USERNAME ":" PASSWORD );

这将执行您正在寻找的正确的字符串连接。编译器将相邻的字符串文字一起运行到单个字符串中。所以,如果你有

char a[] = "The " "quick" " brown " "fox";

它对待它就像你写的那样

char a[] = "The quick brown fox";

我不确定是否“在命令行上提供的值附近”。

答案 1 :(得分:1)

根据the literature at Arduino's Site

在构造函数"gives unpredictable results because 'auth_raw' never got an initial value before you started concatenating different data types. For best results, initialize your Strings before you concatenate them."

中连接

就传递给makefile的变量而言,语法是正确的,命令行-D定义这些变量也是有效的。但是,正如文档所指出的那样,在传递给构造函数时应该避免混合整数和字符串,尽管首先构造String然后连接值是完全有效的。