2012-08-13 2 views
4

커맨드 라인에서 xcodebuild로 프로젝트를 빌드합니다. xCode에 없습니다. 코드에 영향을 줄 수 있도록 일부 마크를 프로젝트에 전달하고 싶습니다. 아래 코드와 같은 :xcodebuild에 사용자 정의 매크로를 전달하는 방법은 무엇입니까?

#if (API_TYPE == 1) 
    #define URL_API @"https://dapi.xxx.com/1.1/" 
#elif (API_TYPE == 2) 
    #define URL_API @"https://tapi.xxx.com/1.1/" 
#elif (API_TYPE == 3) 
    #define URL_API @"https://api.xxx.com/1.1/" 
#else 
    #error "API_TYPE value error! should be only value 1,2,3 !" 
#endif 

코드 파일 외부에 API_TYPE 정의를 전달합니다. 이러한 xcodebuild 명령을 통해. 그러나 그것은 다음과 같이 작동하지 않습니다

xcodebuild -sdk xxx -target xxx SYMROOT=${XCSYMROOT} API_TYPE=${APITYPE} 

API_TYPE의 값이 변경되지 않았습니다. 그러나 SYMROOT의 가치가 바뀌 었습니다. 그래서 API_TYPE 외부로 값을 전달하면 어떻게 구현할 수 있습니까?

답변

2

사용 된 명령 줄 설정은 적어도 Xcode의 빌드 환경 내에서 환경 변수를 효과적으로 설정합니다. 하지만 쉘 환경 변수를 설정해도 환경 변수가 전처리기에 표시되지 않는 것과 마찬가지로 빌드 환경은 컴파일러의 전 처리기로 전달되지 않습니다.

전 처리기에서 표시하려면 프로젝트의 전 처리기 매크로 빌드 설정 또는 원하는 특정 대상에 항목을 추가하십시오. 항목은 "FOO = $ (FOO)"형식이어야합니다. Xcode는 이것을 컴파일러에게 "-DFOO = 값이 FOO 인 환경"으로 전달합니다.

프리 프로세서 매크로 설정을 편집 할 때 모든 구성 (또는 모든 구성을 원하지 않으면 설정하려는 구성)에 맞게 편집해야합니다.

+0

API_TYPE을 정의 할 수 있습니다. 그러나 나는 그것의 정의 가치를 바꿀 수 없다. SYMROOT과 같은. – qiushuitian

+0

죄송합니다. 고객님의 의견을 이해할 수 없습니다. 프리 프로세서 매크로 빌드 설정에 'API_TYPE = $ (API_TYPE)'텍스트를 입력하는 데 문제가 있습니까? –

+0

xcode 프로젝트 설정에서 디버그 설정에 "API_TYPE = 0 DEBUG = 1"텍스트를 입력합니다. 하지만 아래 명령과 같은 xcodebuild를 사용하는 명령 줄에서 : "APITYPE = 2 xcodebuild -sdk xxx -target xxx SYMROOT = $ {XCSYMROOT} API_TYPE = $ {APITYPE}"xcodebuid 명령에 값 2가 전달되지 않았 으면 좋겠다. . API_TYPE = 1 값은 건물 결과에 영향을줍니다. – qiushuitian

3

나는 이것이 이전 게시물입니다 알지만, 왜 그냥 사용

xcodebuild GCC_PREPROCESSOR_DEFINITIONS='$GCC_PREPROCESSOR_DEFINITIONS API_TYPE=1' 

당신이이 같은 응용 프로그램에서 정의한 기존 단지 코드 뭔가를 오버라이드 (override) 선택적으로 가질 수 있도록하려면 :

#define DEFAULT_API_TYPE 1 

#ifdef API_TYPE 
    #define REAL_API_TYPE API_TYPE 
#else 
    #define REAL_API_TYPE DEFAULT_API_TYPE 
#endif 
관련 문제