【问题标题】:Accessing Makefile variables in code?在代码中访问 Makefile 变量?
【发布时间】:2014-07-25 20:04:40
【问题描述】:

更新进度

很抱歉,我忘记将此问题指定为 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

【问题讨论】:

  • 您可能还希望在您的定义周围使用" 以使它们成为字符串文字,但您仍然不能像那样+ 它们。
  • String 是 Arduino C++ 标准库提供的一个类(它确实有一个 + 运算符)。
  • 得到了一个半工作的解决方案,但发现另一个问题:stackoverflow.com/questions/24966878/…

标签: c++ makefile arduino gnu-make


【解决方案1】:

你想要的是

String auth_raw( USERNAME ":" PASSWORD );

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

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

它就像你写的一样对待它

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

我不确定是否将 " 放在命令行上提供的值周围。

【讨论】:

  • 我有以下内容:CPPFLAGS = -DUSERNAME="$(USERNAME)" -DPASSWORD="$(PASSWORD)"String auth_raw2(USERNAME : PASSWORD); 我的品牌:make USERNAME="HELLO" PASSWORD="WORLD" 我得到了 macro.ino:10:29: error: found ‘:’ in nested-name-specifier, expected ‘::’macro.ino:10:20: error: ‘HELLO’ has not been declared
  • : 必须在 USERNAME 和 PASSWORD 之间用引号引起来。否则它不是一个字符串,并且不会启用字符串连接。
  • 此外,当您从命令行、通过 make 将文本传递到编译器时,引用可能会非常混乱。我建议通过 printf 打印值,并在不同的地方尝试不同的引号组合,直到找到有效的方法。
  • 您的评论有点用。我遇到了另一个问题:stackoverflow.com/questions/24966878/…
【解决方案2】:

根据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 也是有效的。但是,正如文档指出的那样,在传递给构造函数时应该避免混合整数和字符串,尽管首先构造字符串然后连接值是完全有效的。

【讨论】:

  • 更新为仅使用字符串。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-12-18
  • 2012-03-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多