2011-04-26 4 views
1

라이브러리 파일을 만들려고합니다. .cpp 파일에는 일부 조건부 컴파일 된 줄이 있습니다. 아두 이노 스케치 파일 HMC58X3_raw.pde 내가 모두 HMC58X3.cpp을에 ISHMC5843을 정의하고, http://sprunge.us/BFVj.h 및 .cpp의 조건부 컴파일

기본적으로

HMC58X3.h http://sprunge.us/hEYW

HMC58X3.cpp http://sprunge.us/faRN

HMC58X3_raw.pde을 : 코드에서 찾을 수 있습니다 HMC58X3.h 플래그가 활성화되어 있는지에 따라 컴파일 할 다른 코드가 있습니다.

조건부 컴파일은 HMC58X3.h 인 경우 작동하지만, HMC58X3.cpp의 경우에는 작동하지 않는 것 같습니다. 마치 ISHMC5843이 정의되지 않은 것처럼 보입니다. 어떻게 일할 수 있습니까?

+0

무엇을 오류? – plinth

+0

오류가 없으면 작동하지 않습니다 .. .cpp 파일에서 #ifdef ISHMC5843의 #else 부분을 항상 컴파일하지만 .h 조건부 컴파일에서 올바르게 작동합니다. –

+0

그리고 혼자 HMC58X3.o를 컴파일 할 때 이런 일이 발생합니까? 어떻게 컴파일합니까? – Beta

답변

4

#define은 전역 변수와 다릅니다. 해당 컴파일 단위의 나머지 텍스트에만 적용되는 프리 프로세서 매크로입니다. 당신이 원하는 것을 할 수있는 몇 가지 방법이 있습니다 :

  1. #define ISHMC5843config.h를 만들고 (다른 그 참조를 포함 전) 사방을 포함해야합니다.
  2. (아마도 Arduino에서 액세스 할 수 없음) CFLAGS에 포함하여 모든 컴파일 라인에 -DISHMC5843이 나타나는지 확인하십시오. (CFLAGS을 컴파일 규칙의 일부로하는 방법에 대한 자세한 내용은이 질문의 범위를 벗어납니다.)
+0

나를 이길. .. – Oliver

0

HMC58X3.cpp를 컴파일하면 컴파일러에서 HMC58X3_raw.pde의 매크로 정의를 보지 못했습니다. IMO, 글로벌 부울 상수 변수를 사용하여 여기에서하려는 것을 달성하는 것이 좋습니다.

0

ISHMC58431에 정의 된 것을 볼 수 없습니다. HMC58X3.h 또는 HMC58X3.cpp.

파일이 사전 처리 될 때 정의가 선행 처리기에 표시되어야합니다. 매크로의 가시성이 필요한 모든 파일에 #define을 포함하는 공통 파일을 사용하거나 컴파일러 명령 행에서 매크로를 정의하여 (예 : -DISHMC58431 (컴파일러에 따라 다름)) 보통은 #include에 의해 수행됩니다.

물론 이것은 .pde 파일도 #include 문을 가지고 있으므로 전처리기에 의해 처리되어야한다고 가정합니다.