2014-07-25 3 views
0

업데이트 진행코드에서 Makefile 변수에 액세스 하시겠습니까?

죄송합니다.이 질문은 Arduino 질문으로 지정하는 것을 잊어 버렸습니다. 방금 전 처리기가 어떤 플랫폼에서 실행되고 있는지 독립적 인 전 처리기 문제라고 가정했습니다. 내가 아두 이노가-확인 사용하고 내가 사용자 이름과 암호를 전달하기 위해 노력하고

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

'문자열'이란 무엇입니까? – rubenvb

+1

또한 정의를 둘러싼 문자열 리터럴을 만들기 위해'''사용하고 싶지만 여전히 그런 식으로'+'쓸 ​​수는 없습니다. – crashmstr

+1

['String'] (http://arduino.cc/en/Reference/StringObject)는 Arduino C++ 표준 라이브러리가 제공하는 클래스입니다 (그리고'+'연산자가 있습니다.) –

답변

1

당신이 찾고있는 적절한 리터럴 문자열 연결을 할 것입니다

String auth_raw(USERNAME ":" PASSWORD); 

입니다. 컴파일러는 인접한 문자열 리터럴을 함께 단일 문자열로 실행합니다. 당신이

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

있는 경우에 그래서 당신이 명령 줄에서 제공하는 값을 만들기 위해 주위에

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

내가 "퍼팅에 대해 확실하지 않다 쓴 경우와 같은 취급합니다.

+0

다음과 같은 것들이 있습니다 :'CPPFLAGS = -DUSERNAME = "$ (USERNAME)"-DPASSWORD = "$ (PASSWORD)"''String auth_raw2 (USERNAME : PASSWORD); 'make ':'make USERNAME = "HELLO"PASSWORD = "WORLD"'그리고 매크로': 10 : 29 : 오류 : 중첩 된 이름 지정자에서': ' macro.ino : 10 : 20 : error : 'HELLO'가 선언되지 않았습니다. – disappearedng

+0

: : USERNAME과 PASSWORD 사이에 따옴표가 있어야합니다. 문자열을 반환하고 문자열 연결을 활성화하지 않습니다. –

+0

또한, 명령 줄에서 make를 통해 텍스트를 컴파일러로 전달할 때 인용문이 매우 혼란 스러울 수 있습니다. 나는 printf를 통해 값을 출력하고 어떤 것을 찾을 때까지 다른 장소에서 여러 다른 인용 부호 조합을 시도해 보는 것이 좋습니다. –

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을 구성한 다음 값을 연결하는 것이 완벽하게 유효합니다.

+0

문자열 만 사용하도록 업데이트되었습니다. – disappearedng

관련 문제