Xcode는 좋은 방법을 제공하지 않습니다. 스크립트 실행 빌드 단계에서 작업해야하는 것은 환경에서 제공되는 Xcode 빌드 설정입니다.
실제로 전체 인수 목록이 ld
이어야하는 경우 사용할 수있는 해킹이 있습니다. LD
및 LDPLUSPLUS
빌드 설정을 사용하면 Xcode에서 실제 ld
대신 자신의 스크립트를 호출 할 수 있습니다. 이 스크립트에서 args를 캡처하고 실제 링커를 호출 한 다음 Run Script 빌드 단계가 아닌 원하는 포스트 프로세싱을 수행 할 수 있습니다.
는 대상에 대한 .xcconfig 만들기 : 여기
당신이 그렇게 할 수있는 방법입니다.
그것은 다음과 같이한다 : 프로젝트의 디렉토리
LD = $(SRCROOT)/ld-wrapper/clang
LDPLUSPLUS = $(SRCROOT)/ld-wrapper/clang++
SRCROOT 포인트. LDPLUSPLUS 라인은 앱에 C++ 또는 ObjC++ 코드가있는 경우에만 필요합니다. xcconfig를 만들고 싶지 않으면 Xcode UI를 통해 사용자 정의 빌드 설정으로 추가 할 수 있습니다.
Xcode에서 호출 할 래퍼 스크립트를 만듭니다.
는 <your project root>/ld-wrapper/wrapper.sh
에서이 같은 스크립트를 설치합니다
#!/bin/bash
set -o errexit
# Choose which clang to run (clang or clang++) depending on how we're invoked.
# If we're invoked via the 'clang' link, we'll run 'clang'. If we're invoked
# via the 'clang++' link, we'll run 'clang++'.
CLANG_PATH="$DEVELOPER_DIR"/Toolchains/XcodeDefault.xctoolchain/usr/bin/$(basename "$0")
"$CLANG_PATH" "[email protected]"
echo "clang args: [email protected]"
echo "do any post processing here."
++는 그 소리와 그 소리에 대한 래퍼 스크립트에 대한 심볼릭 링크를 만듭니다 그것 뿐이다
cd <project root>/ld-wrapper
ln -s wrapper.sh clang
ln -s wrapper.sh clang++
합니다. 못생긴지만 작동합니다.
고마워요. @fpotter, 당신이 처음으로 대답하는 것을 기쁘게 생각합니다. 나는 LD 변수 접근법이 흥미 롭다고 생각한다. 'xcodebuild -dry-run'의 결과를 파싱 할 수없는 이유는 무엇입니까? – ekeren
'드라이 런'의 출력을 확실히 파싱 할 수 있습니다. 하지만 Run Script 내에서 'dry-run'으로 xcodebuild를 호출하는 것은 느립니다. 드라이 클리닝 만하는 경우에도 xcodebuild는 프로젝트를 열고 빌드 준비에 많은 시간을 할애합니다. 실제로 대규모 프로젝트의 경우 마른 일을하는 데 1 분 이상 걸릴 수 있습니다. – fpotter
프로젝트에 신속한 코드가 포함되어있을 때 xcode가 LD 및 LDPLUSPLUS 변수를 무시하는 이유는 무엇입니까? – ekeren