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 LD
và LDPLUSPLUS
, 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.
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
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
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