2010-04-25 33 views
20

Làm cách nào để xác định macro tiền xử lý khi sử dụng xcodebuild?xcodebuild - cách xác định macro tiền xử lý?

Tôi cần xây dựng ứng dụng của mình bằng nhiều cấu hình khác nhau và tôi muốn thực hiện việc này bằng cách sử dụng tập lệnh shell chạy xcodebuild một số lần với các macro tiền xử lý khác nhau.

Trả lời

18

Cmd + Tôi trong dự án để mở hộp thoại Thông tin. Sau đó, trong tab "Xây dựng", hãy tìm cài đặt "Preprocessor Macros". Thêm macro vào đó.

... Nơi bạn có thể tìm thấy tên thiết lập là GCC_PREPROCESSOR_DEFINITIONS, vì vậy bạn có thể thêm

GCC_PREPROCESSOR_DEFINITIONS="foo=bar" 

để các đối số xcodebuild.

+4

* khi sử dụng xcodebuild * –

+1

Tôi tin rằng những gì KennyTM cho biết sẽ hoạt động tốt trong xcodebuild khi nó được thiết lập (sử dụng GUI). – nall

+2

Tôi đã xem xét các tùy chọn/cờ của xcodebuild, thậm chí không nhận thấy rằng cài đặt cài đặt là một phần của cú pháp sử dụng cơ bản. Cảm ơn. –

29

Bạn vượt qua GCC_PREPROCESSOR_DEFINITIONS trên dòng lệnh xcodebuild. Hãy nhớ rằng đối số sẽ được đánh giá lại cho việc tách từ và xử lý trích dẫn giống như vỏ, vì vậy bạn cần phải cẩn thận, đặc biệt khi các giá trị macro của bạn không chỉ đơn giản là 1 s (ví dụ: chữ số NSString).

Cũng quan trọng là mở rộng GCC_PREPROCESSOR_DEFINITIONS bên trong giá trị bạn đặt (trích dẫn một lần, do đó tập lệnh của bạn không mở rộng nó nhưng vỏ xây dựng mở rộng), nếu không bạn sẽ mất cài đặt xây dựng của dự án cho thuộc tính này.

Các mã sau đặt định nghĩa của bạn trong một mảng bash tốt đẹp và sau đó mở rộng mảng trong dòng xcodebuild lệnh trong một cách mà bao thứ bị độc đáo thoát:

defines=(TESTING=1 '[email protected]"http://192.168.0.101:8080"') 

xcodebuild -verbose -scheme "MyAppScheme" \ 
    GCC_PREPROCESSOR_DEFINITIONS='$GCC_PREPROCESSOR_DEFINITIONS '"$(printf '%q ' "${defines[@]}")" 
+2

Bạn có thể cho tôi biết, bắt buộc phải đưa ra một giá trị, KIỂM TRA = 1 hay không? Có điều gì đó tương đương với #define TESTING không? – karim

+0

Ok, tôi phải sử dụng báo giá kép và xóa giá trị $. Tôi đã có, GCC_PREPROCESSOR_DEFINITIONS = '$ value $ {e}', không hoạt động, nhưng GCC_PREPROCESSOR_DEFINITIONS = "$ {e}" hoạt động. – karim

+0

@karim Tôi không biết $ e là gì nhưng tôi có cảm giác bạn đã hoàn toàn bỏ lỡ điểm của câu trả lời này. Ngoài ra, mảng định nghĩa là nơi bạn đặt định nghĩa tùy chỉnh của riêng mình. Cái ở trên chỉ là một ví dụ. Trong khả năng tất cả các mảng của bạn sẽ trông hoàn toàn khác nhau. – lhunath

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