2014-03-12 4 views
7

이 매크로로 올바른 코드를 컴파일 할 수 없습니다. 여기 enter image description hereXCode 5.1 전 처리기 매크로가 작동하지 않습니다.

(나는 릴리스 빌드를하고 있어요) 빌드 설정은 다음과 같습니다 : 여기

코드 인 GCC 문서는 -Dname 1로 정의됩니다 말한다 enter image description here 주, 그래서 생략 "= 1"릴리스 : enter image description here

: 여기 enter image description here

는 컴파일 로그 정의가 (노란색) 명령 라인을 따라 전달되었음을 보이고여기

내 출력 로그는 ADD_CAMERA_FEATURE가 정의되지 않은 것처럼 코드는 컴파일 된 것을 보여주고있다 : 나는 소스에 #DEFINE의 ADD_CAMERA_FEATURE 1을 넣으면 이 enter image description here

, #ifdef를 기대 작품으로, 그러나 나는 또한 경고를 기존 매크로를 재정의하고 있습니다. 따라서 XCode는 매크로가 빌드 구성 설정에서 존재해야 함을 알고 있지만 여전히 #ifdef 코드 분기를 포함하지 않습니다.

기타 자세한 사항 :

  1. 엑스 코드 여기에 5.1
  2. OS X 10.9.2
  3. 아이폰 OS 7.1

내 목표는 응용 프로그램의 아이폰 OS 7 버전을 구축하기위한 목표를 가지고있다 두 가지 모두 동일한 출처에서 제공되는 앱의 iOS 7 이전 버전을 제작하기위한 타겟입니다. 나는 오랫동안 iOS 7로 업그레이드 할 수없는 오래된 장치를 지원해야합니다. 아마도 이것에 대해 갈 수있는 더 좋은 방법이있을 것입니다. 이 작업을 수행하는 방법에 대한 제안이 있으면 감사하겠습니다.

+1

프로젝트를 청소 했습니까? – bbarnhart

+0

그냥 깨끗하게 해 보았습니다. 같은 결과. –

+0

컴파일 로그는 릴리스 빌드를 수행 중임을 보여줍니다. 동일한 작업을 디버그 빌드를 시도해보십시오. 제대로 작동합니까? (내가 여기에 문제를 재현 할 수 없기 때문에 묻습니다.) – matt

답변

5

발견. 목표와 종속성과 관련이 있습니다. 소스 파일을 컴파일하기위한 새로운 타겟을 생성하고 그 타겟에 프리 프로세서 정의를 추가했습니다. 컴파일 된 객체는 프레임 워크로 사용되는 정적 라이브러리로 링크됩니다. 그래서 정적 라이브러리에 대한 새로운 타겟도 만들었습니다. 불행히도 정적 라이브러리 타겟이 전 처리기 정의를 포함하지 않는 원래의 컴파일 단계에 여전히 의존한다는 사실을 간과했다. 결과적으로, 오브젝트 파일을 올바르게 빌드하고 있었지만, 새로운 오브젝트 파일은 런타임에 프로젝트에 링크 된 파일이 아니 었습니다. 따라서 정적 라이브러리의 빌드 단계에서 올바른 대상 파일로 대상 종속성을 변경해야하며 모든 작업이 시작되었습니다. @matt와 @StevenFisher에게 올바른 설정을 가르쳐 주셔서 감사합니다.

enter image description here

관련 문제