2013-04-13 2 views
0

내 프로젝트 내에 서브 프로젝트 (정적 라이브러리)가 있습니다.프로젝트의 헤더를 정적 라이브러리에 포함합니다.

이 정적 라이브러리는 여러 개의 응용 프로그램에서 사용할 수 있으므로이 구성 파일은 응용 프로그램 구성이 포함 된 프로젝트에 있습니다. 정적 라이브러리는이를 읽어야합니다.

문제는 파일을 찾을 수 없기 때문에 정적 라이브러리에

#import "config.h" 

을 추가하는 것은 실패 할 것입니다.

검색 헤더에 프로젝트 루트의 절대 경로를 추가 할 수 있지만 다른 프로젝트에서이 정적 라이브러리를 사용하기 때문에 하드 코딩하지 않도록하고 싶습니다. 다른 문제는 정적 라이브러리가 다른 볼륨에 있기 때문에 ../..와 같은 상대 링크를 사용할 수 없다는 것입니다.

$ (SRCROOT)를 정적 라이브러리의 검색 경로에 포함 시키면 그 라이브러리를 사용하는 프로젝트가 아닌 해당 라이브러리의 루트가됩니다.

어떻게 해결할 수 있습니까?

그냥 내 질문에주의하십시오. 나는 프로젝트에서 사용하는 정적 라이브러리 안에 있습니다. Config.h가 프로젝트에 있습니다. 정적 라이브러리에 config.h를 가져 오려고합니다.

쉬운 방법이 있다면 알려주세요. 당신이 내 고통을 볼 수 있도록

나는 herehere에 샘플 프로젝트를 업로드했습니다.

감사

답변

0

한 가지 방법은 다소 해킹의 첫 번째 항목으로, 각 앱의 빌드 단계스크립트 실행을 추가하고 일부 알려진 장소에 config.h 파일을 복사하는 것입니다 - /tmp/Config.h 및 포함 된 라이브러리에서 찾을 것입니다. 파일은 모든 빌드에서 복사되므로 항상 적합합니다.

EDIT1 :별로 좋지 않지만 라이브러리의 종속성 바로 아래에 실행 빌드 스크립트를 추가 할 수 있습니다. 하나만 추가하고 환경 변수를 표시하도록 설정된 체크 상자를 그대로 둡니다. 당신이 한 세트 볼 수 있습니다

file_list를을 =/볼륨/데이터/사용자/dhoerl/라이브러리/개발자/엑스 코드/DerivedData/MyProject를-fdzaatzqtmrnzubseakedvxmsgul/구축/중간체/MyStaticLibrary.build/디버그-iphoneos/MyStaticLibrary.build/객체/LinkFileList

당신이 볼 수있는 것은 다음의 몇 가지가 접두어로 현재 프로젝트 폴더 가지고있다 :

/볼륨/데이터/사용자/dhoerl/라이브러리/개발자/엑스 코드/DerivedData/MyProject-

접두어를 얻기 위해 스크립트를 작성한 다음 로컬 Config.h 파일 경로를 추가하면 이제는 Config.h 헤더에 대한 완전한 경로는 라이브러리의 알려진 위치에 복사 할 수 있습니다. 더 나은 해결책이있을 수 있으므로 xcode 포럼에 게시 할 예정입니다. Xcode 3에 있어야합니다. 중요한 것을 다시 얻으 려한다면이를 업데이트 할 것입니다.

EDIT2 : 이것 봐 : 1) 라이브러리를 클릭하면, 빌드 페이즈를 클릭하는 스크립트 실행 버튼

2 '+'오른쪽 아래를 눌러 구축 단계 추가)에 지금의 두 번째 항목을 드래그

# Get the Project Name (assumes upper/lower/numbers only in name) 
PROJ=$(echo $BUILD_DIR | sed -En -e 's/(\/.*\/)([A-Za-z0-9]+)-([a-z]+\/Build\/Products)/\2/p') 
# Use this variable to construct a full path 
FULL_PATH="/Volumes/Data/Users/dhoerl/Downloads/nightmare/"$PROJ"/"$PROJ"/HelloWorldLayer.h" 
echo FULL_PATH equals $FULL_PATH 
# Make Sure MyStaticLibrary is correct 
echo PROJ_DIR equals "$PROJECT_DIR/MyStaticLibrary" 
cp -f "$FULL_PATH" "$PROJECT_DIR/MyStaticLibrary" 
:)에 "/ 빈/ksh를"

4 셸을 변경)

3 (대상 종속성 아래) 목록은 적절한 파일/경로가이를 편집 한 후,이에 붙여 넣기

5)이 라이브러리는 원하는 곳에 라이브러리를 설치한다고 가정하지만 각 App 프로젝트는 동일한 상위 폴더 (모든 제한 사항이 아니라 이전에 내가 한 것)를 가져야합니다.

추신 : 나는 이런 종류의 일을 할 때 일반적으로 응용 프로그램의 실제 파일을 포함하지 않지만 라이브러리에서 인스턴스화되지 않은 클래스의 헤더를 만듭니다. 이 Foo를 호출 할 수 있습니다. 그래서 라이브러리에는 Foo.h가 있고, 위젯의 수, 특수 폴더의 위치, plists, 배열, 사전 등 정보를 반환하는 많은 메소드가 있습니다. 아이디어는 라이브러리가 클래스 메소드와이 인터페이스 (클래스 싱글, 아니면 그냥 클래스를 통해 필요가 무엇이든 얻을하는 방법을 알고있다 YMMV

는 PSS :.. 다른 사람이이 읽기, 그것은 데모 프로젝트를 만들 지불

+0

나를 위해 작동하지 않습니다. ** 샘플 프로젝트를 ** [여기] (http://dfiles.eu/files/vj7egy9ig) ** 및 ** [여기] (http://www.sendspace.com/file/dfvs09) *에 업로드했습니다. *, 그래서 당신은 내 고통을 볼 수 있습니다. – SpaceDog

+0

그것을보고 ... –

+0

위대한! 감사!! – SpaceDog

0
.

다른 경로를 선택하십시오.이 config.h 파일을 컴파일러 기호를 사용하여 정적 라이브러리의 일부로 만들어 기능을 전환 한 다음 프로젝트에서 필요한 기능에 따라 해당 기호를 정의하십시오.

+0

config.h 각 프로젝트에 특정 있기 때문에 내가 할 수 없어. 모든 프로젝트에 대해 config.h를 수정하고 정적 라이브러리 안에 있으면 모든 프로젝트가 수정 된 버전을 읽습니다. – SpaceDog

+0

나를 위해 작동하지 않습니다. 샘플 프로젝트를 ** [여기] (http://dfiles.eu/files/vj7egy9ig) ** 및 ** [여기] (http://www.sendspace.com/file/dfvs09) **에 업로드했습니다. , 그래서 당신은 내 고통을 볼 수 있습니다. – SpaceDog

관련 문제