2015-02-02 20 views
8

Làm thế nào tôi có thể xác định những gì sẽ là đối số của lệnh ld trong quá trình xây dựng từ bên trong một kịch bản chạy như "chạy giai đoạn xây dựng kịch bản"?tìm ra các đối số lệnh ld từ giai đoạn xây dựng kịch bản lệnh xcode

Tôi đã xem xét xcodebuild -dry-run làm tùy chọn, nhưng sau đó tôi cần phải hiểu những gì nên là đối số tôi cung cấp.

Bất kỳ ý tưởng nào về giải pháp mạnh mẽ?

EDIT:

Dường như xcodebuild không hỗ trợ LD và LDPLUSPLUS khi dự án bao gồm mã nguồn nhanh chóng. Vì vậy, giải pháp mà @fpotter được cung cấp không hoạt động trên dự án nhanh chóng.

Mọi suy nghĩ?

Trả lời

5

Xcode không hiển thị một cách hay để thực hiện việc này. Trong một giai đoạn xây dựng Chạy Script, tất cả những gì bạn phải làm việc là cài đặt Xcode được cung cấp cho bạn trong môi trường.

Nếu bạn thực sự cần toàn bộ danh sách đối số để ld, có một hack bạn có thể sử dụng. Với các cài đặt xây dựng LDLDPLUSPLUS, bạn có thể làm cho Xcode gọi một tập lệnh của riêng bạn thay vì ld thực. Từ tập lệnh đó, bạn có thể thu thập các args, gọi đến trình liên kết thực, và sau đó thực hiện bất kỳ xử lý bài đăng nào bạn thích ở đó thay vì trong giai đoạn tạo Script chạy.

Đây là cách bạn có thể làm điều đó:

Tạo một .xcconfig cho mục tiêu của bạn.

Nó sẽ giống như thế này:

LD = $(SRCROOT)/ld-wrapper/clang 
LDPLUSPLUS = $(SRCROOT)/ld-wrapper/clang++ 

điểm SRCROOT vào thư mục của dự án của bạn. Dòng LDPLUSPLUS chỉ được yêu cầu nếu ứng dụng của bạn có mã C++ hoặc ObjC++. Nếu bạn không muốn tạo xcconfig, bạn cũng có thể thêm chúng dưới dạng cài đặt xây dựng do Người dùng xác định thông qua giao diện người dùng Xcode.

Tạo tập lệnh trình bao bọc cho Xcode để gọi.

Cài đặt một kịch bản như thế này tại <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." 

Tạo liên kết tượng trưng cho kịch bản wrapper cho kêu vang và kêu vang ++:

cd <project root>/ld-wrapper 
ln -s wrapper.sh clang 
ln -s wrapper.sh clang++ 

Vậy là xong. Nó xấu xí, nhưng nó hoạt động.

+0

Cảm ơn @fpotter, vui mừng là người đầu tiên bạn trả lời trong SO. Tôi nghĩ rằng phương pháp biến LD rất thú vị. Tại sao tôi không thể phân tích kết quả của 'xcodebuild -dry-run'? – ekeren

+0

Bạn chắc chắn có thể phân tích đầu ra của 'chạy khô '. Tuy nhiên, gọi xcodebuild với 'dry-run' từ bên trong một Run Script sẽ chậm. Ngay cả khi chỉ chạy khô, xcodebuild dành rất nhiều thời gian để mở các dự án của bạn và chuẩn bị xây dựng. Trên các dự án thực sự lớn, có thể mất hơn một phút để chạy khô. – fpotter

+1

bạn có bất kỳ đầu mối nào tại sao xcode bỏ qua biến LD và LDPLUSPLUS khi dự án có chứa mã nhanh không? – ekeren

Các vấn đề liên quan