[objective-c] Xcode에서 전 처리기 기호를 정의하는 방법

Xcode 프로젝트에서 속성을 설정하여 조건부 컴파일에 대한 기호를 설정할 수 있습니까?

내 목표는 가져 오기 / 포함을 사용하지 않고도 모든 파일에 사용할 수있는 심볼을 만들어 공통 클래스 집합이 일부 프로젝트에서 특별한 동작을 가질 수 있도록하는 것입니다. 다음과 같지만 내 기호가 있습니다.

#if TARGET_IPHONE_SIMULATOR
    ...
#endif



답변

타겟 또는 프로젝트 설정으로 이동하여 왼쪽 하단의 기어 아이콘을 클릭하고 “사용자 정의 설정 추가”를 선택합니다. 새 설정 이름은이어야하며 GCC_PREPROCESSOR_DEFINITIONS오른쪽 필드에 정의를 입력 할 수 있습니다.

Steph의 의견에 따라 전체 구문은 다음과 같습니다.

constant_1=VALUE constant_2=VALUE

( 문의 경우) 값을 제공하는 대신 기호를 #define하려는 경우 ‘=’ 가 필요 하지 않습니다.#ifdef


답변

사용자 정의 설정을 만들 필요가 없습니다. 기본 제공 설정 “전 처리기 매크로”는 잘 작동합니다.
대체 텍스트 http://idisk.mac.com/cdespinosa/Public/Picture%204.png

동일한 접두사 파일을 사용하는 여러 대상 또는 프로젝트가있는 경우 대신 미리 컴파일 된 헤더에서 사용되지 않는 전 처리기 매크로를 사용하여 매크로 정의의 차이가 불필요한 추가 미리 컴파일 된 헤더 집합을 트리거하지 않도록합니다.


답변

부록으로이 기술을 사용하여 대상에서 문자열을 정의하는 경우 다음과 같이 정의하고 사용해야했습니다.

빌드 설정-> 전 처리기 매크로에서 백 슬래시는 정의에서 중요합니다.

APPURL_NSString=\@\"www.foobar.org\"

그리고 소스 코드에서 :

objectManager.client.baseURL = APPURL_NSString;


답변

*_Prefix.pch파일을 사용하여 프로젝트 전체 매크로를 선언 할 수 있습니다 . 해당 파일은 일반적으로 기타 소스 그룹에 있습니다.


답변

“GCC 4.2 전처리”아래에 있습니다 (또는 검색 창에 “prepro”를 입력) …

…하지만, 제 삶을 위해 그것을 작동시킬 수는 없습니다.

표준 디버그 및 릴리스 구성이 있고 디버깅 구성에서 DEBUG = 1을 정의하고 싶습니다. 그러나 값으로 추가 한 후 :

(설정 창에서)> 전 처리기 매크로 : DEBUG = 1

#if DEBUG
    printf("DEBUG is set!");
#endif 

… 인쇄하거나 호출하지 않습니다. 날 미치게 해 …


답변

빌드 설정에 표시되지 않는 GCC 전처리 섹션에 대한 Kevin Laity의 의견 (cdespinosa의 답변 참조)에 대한 응답으로 Active SDK를 그 뒤에 (Base SDK)라고 표시하면이 섹션이 표시됩니다. 프로젝트> 활성 대상 설정> XXX (Base SDK) 메뉴를 선택하여이를 수행 할 수 있습니다. XCode (Base SDK)의 다른 버전에서는 (프로젝트 설정 또는 프로젝트 기본값)과 같이 다를 수 있습니다.

이 섹션이 나타나면 사용자 정의 설정을 만드는 대신 프로세서 매크로에 정의를 추가 할 수 있습니다.


답변

Xcode 9.4.1 및 C ++ 프로젝트의 경우. 디버그릴리스 빌드 const char*모두에 전 처리기 매크로 추가 .

  1. 프로젝트 선택

    프로젝트 선택

  2. 빌드 설정 선택

    빌드 설정 선택

  3. “전 처리기 매크로 ” 검색

    search1
    search2

  4. 대화 형 목록 열기

    대화 형 목록 열기

  5. 매크로를 추가하고 인용을 이스케이프하는 것을 잊지 마세요.

    경로 추가

  6. 소스 코드에서 공통적으로 사용 const char*

    ...
    #ifndef JSON_DEFINITIONS_FILE_PATH
    static constexpr auto JSON_DEFINITIONS_FILE_PATH = "definitions.json";
    #endif
    ...
    FILE *pFileIn = fopen(JSON_DEFINITIONS_FILE_PATH, "r");
    ...