2011-09-26 39 views
12

Dự án Xcode iOS hiện tại của tôi sử dụng một số thư viện tĩnh. Các mô-đun mã khác nhau trong các thư viện tĩnh có các mức gỡ rối khác nhau mà tôi có thể bật/tắt với #defines từ bên trong mô-đun đó.Biến môi trường Xcode cho các dự án con

Những gì tôi muốn làm là có tất cả các gỡ lỗi mặc định tắt trong thư viện sau đó đặt mức gỡ lỗi từ dự án mẹ. Tôi muốn làm điều này vì vậy bất kỳ proj sử dụng lib phải bật một cách rõ ràng gỡ lỗi.

Vì vậy, MainProj sử dụng myLib1 và myLib2 vv Trong myLib1 là một mô-đun được gọi là fooModule. fooModule có mã debug như:

#if FOOMODULE_DEBUG_LEVEL > 0 
//debug code, console logs etc 
#endif 

Tôi muốn để có thể xác định FOOMODULE_DEBUG_LEVEL trong dự án cha mẹ nên thư viện nhặt nó lên ở thời gian xây dựng và biên dịch một cách thích hợp.

Tôi đã thử:

#define FOOMODULE_DEBUG_LEVEL 1 

trong dự án chính .pch và tôi đã cố gắng thêm FOOMODULE_DEBUG_LEVEL như một người dùng định nghĩa biến môi trường với giá trị là 1. Cả trong số đó được chọn của các tiểu dự án lib.

Có cách nào để làm điều này hoặc tôi đang tiếp cận điều này theo cách sai?

Trả lời

-1

Có thể thêm định nghĩa bằng cách sử dụng cài đặt xây dựng "Preprocessor macro" cho mục tiêu và hoặc cấu hình xây dựng gỡ lỗi/phát hành mà bạn muốn bật gỡ lỗi.

Trong trường hợp của bạn, bạn sẽ nhấp đúp vào cột giá trị và sau đó nhấp "+" để thêm macro mới. Marco sẽ là "FOOMODULE_DEBUG_LEVEL = 1", kết quả là -DFOOMODULE_DEBUG_LEVEL=1 đối với trình biên dịch.

+0

Xin chào Mattias, Thêm macro tiền xử lý dường như không ảnh hưởng đến việc xây dựng các dự án phụ (tức là lib tĩnh) mà tôi đã đưa vào dự án chính – tomj

+0

Điều này không hiển thị trong thư viện tĩnh. Bạn có thể cho tôi biết điều gì có thể là lý do? – applefreak

+0

Bạn xây dựng một thư viện tĩnh hoặc liên kết của bạn với một thư viện tĩnh đã được xây dựng? -D macro chỉ được sử dụng tại thời gian biên dịch. –

0

bạn thực hiện việc này mà không cần nhiều định nghĩa bằng cách tạo tệp xcconfig và sau đó tham chiếu hoặc #include -cho chúng trong suốt dự án của bạn. vì vậy, bạn có thể áp dụng gợi ý của Mattias và sau đó xác định defs tiền xử lý trong xcconfig. sau đó bạn có một tập tin để thay đổi (và một xây dựng lại đầy đủ nếu bạn yêu cầu các defs trong tập tin pch, trong đó có các cài đặt riêng biệt cho).

xcode cũng cho phép bạn chỉ định xcconfigs riêng cho mỗi cấu hình xây dựng.

+0

Cảm ơn bạn đã gợi ý, – tomj

+0

Tôi đã thêm AppDebug.xcconfig vào dự án của tôi và trong trang thông tin dự án thiết lập bản sửa lỗi và bản phát hành của tôi được 'dựa trên' trên AppDebug.xcconfig. Sau đó, trong AppDebug.xcconfig thêm DEBUG_VARIABLE = 1. #if được xác định (DEBUG_VARIABLE) NSLog (@ "đây là một thử nghiệm"); # endif không in được gì cả. Tôi phải thiếu một cái gì đó như thế nào làm việc các tập tin xcconfig. – tomj

+0

thêm nó làm định nghĩa tiền xử lý: 'GCC_PREPROCESSOR_DEFINITIONS = DEBUG_VARIABLE = 1 $ (kế thừa)' – justin

-1

Giải pháp

1) Mục tiêu> Cài đặt xây dựng> Macro tiền xử lý. Đặt biến môi trường làm def tiền xử lý cho mục tiêu (dường như phải là mục tiêu thay vì dự án), ví dụ: DEBUG_VARIABLE = 1

2) Dự án> Tạo giai đoạn> Thêm giai đoạn xây dựng. Sau đó, trong Run Script xuất biến: xuất DEBUG_VARIABLE

Bây giờ tất cả các dự án phụ đều chọn biến môi trường này.

Tôi nghĩ lý tưởng sẽ là sử dụng đề xuất của Justin về việc có tệp .xcconfig với tất cả các macro tiền xử lý được xác định ở một nơi để dễ dàng chỉnh sửa chúng. Đối với cuộc sống của tôi, tôi không thể thực hiện công việc này. Nếu tôi đặt điều này trong tệp .xcconfig: GCC_PREPROCESSOR_DEFINITIONS = DEBUG_VARIABLE = 1 $ (được kế thừa) Sau đó, cơ sở gỡ lỗi và/hoặc bản phát hành xây dựng trên cấu hình này biến môi trường DEBUG_VARIABLE không bao giờ được đặt.

+0

Cập nhật: Nếu tôi tạo dự án mới thì thêm tệp .xcconfig như được mô tả ở trên biến môi trường được đặt và #ifdefs hoạt động trong mã trên biến này. Nếu tôi thực hiện chính xác quy trình tương tự trong dự án tôi đang làm việc thì nó không hoạt động. Tôi đoán có phải là một cái gì đó đặc biệt với các thiết lập dự án của dự án chính của tôi ... không có ý tưởng gì mặc dù! – tomj

+0

Tôi nghĩ rằng tôi đã có cài đặt trong mục tiêu sẽ ghi đè cài đặt dự án. Tôi đã xóa tất cả các macro tiền xử lý trong bản dựng và bây giờ tệp .xcconfig có vẻ hoạt động. Thay đổi không phải lúc nào cũng được chọn trong bản dựng trừ khi tôi làm sạch. Phải nhớ để làm điều này! – tomj

+1

Đã cố gắng sử dụng lời khuyên này, tuy nhiên tôi không có bất kỳ giai đoạn xây dựng nào ở cấp dự án. Việc thêm bất kỳ tập lệnh chạy nào vào cấp mục tiêu (nơi tôi có các giai đoạn xây dựng) sẽ không giúp ích gì, vì chúng không chạy trước khi các dự án con đang được xây dựng. – DrMickeyLauer

0

Tôi sẽ chỉnh sửa giản đồ và thêm tập lệnh shell dựng sẵn để đặt biến thích hợp. Khi bạn thêm tập lệnh, bạn có thể thiết lập từ mục tiêu nào bạn nhận được định nghĩa.

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