2010-12-06 24 views
7

Trong một ứng dụng Cocoa, tôi muốn sử dụng biên soạn có điều kiện, như:biên soạn có điều kiện sử dụng MACOSX_DEPLOYMENT_TARGET trong Xcode cho một ứng dụng Cocoa

#if MACOSX_DEPLOYMENT_TARGET <= MAC_OS_X_VERSION_10_4  
    [[NSFileManager defaultManager] removeFileAtPath:path handler:nil]; 
#else 
    [[NSFileManager defaultManager] removeItemAtPath:path error:NULL]; 
#endif 

Hy vọng của tôi là điều này sẽ tránh được cảnh báo trình biên dịch về removeFileAtPath: bị phản đối khi MACOSX_DEPLOYMENT_TARGET = 10.6, vì nó không được biên dịch dòng đó.

Nó không hoạt động.

Khi MACOSX_DEPLOYMENT_TARGET = 10.6 Tôi nhận được cảnh báo rằng removeFileAtPath: không được chấp nhận. Nhưng nó không nên biên dịch dòng đó, vì vậy nó không nên cảnh báo về nó có một phương pháp không được chấp nhận!

(Tôi đang thiết MACOSX_DEPLOYMENT_TARGET cả các thiết lập dự án xây dựng và mục tiêu xây dựng các thiết lập. Tôi đã BASE_SDK thiết lập để 10,6 và chỉ định GCC 4.2 trong cả hai, quá.)

Tôi đang làm gì sai? Tôi có một số hiểu lầm cơ bản về việc biên dịch có điều kiện không?

Trả lời

11

MACOSX_DEPLOYMENT_TARGET chủ yếu được sử dụng để thực hiện liên kết yếu. Bạn nên sử dụng MAC_OS_X_VERSION_MIN_REQUIRED thay vì để thực hiện biên soạn có điều kiện:

#if MAC_OS_X_VERSION_MIN_REQUIRED < MAC_OS_X_VERSION_10_5 
    [[NSFileManager defaultManager] removeFileAtPath:path handler:nil]; 
#else 
    [[NSFileManager defaultManager] removeItemAtPath:path error:NULL]; 
#endif 

Xem Ensuring Backwards Binary Compatibility - Weak Linking and Availability Macros on Mac OS X từ Apple để biết thêm ví dụ.

+0

Hoàn hảo! Cảm ơn nhiều. – user532477

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