Cách xác định ký hiệu tiền xử lý trong Xcode


100

Có thể đặt một ký hiệu cho quá trình biên dịch có điều kiện bằng cách thiết lập các thuộc tính trong một dự án Xcode không?

Mục đích của tôi là tạo một biểu tượng có sẵn cho tất cả các tệp mà không cần phải sử dụng import / include, để một tập hợp các lớp chung có thể có một hành vi đặc biệt trong một số dự án. Giống như sau đây, nhưng với các biểu tượng của riêng tôi.

#if TARGET_IPHONE_SIMULATOR
    ...
#endif

Câu trả lời:


116

Chuyển đến cài đặt Mục tiêu hoặc Dự án của bạn, nhấp vào biểu tượng Bánh răng ở dưới cùng bên trái và chọn "Thêm cài đặt do người dùng xác định". Tên cài đặt mới phải là GCC_PREPROCESSOR_DEFINITIONSvà bạn có thể nhập định nghĩa của mình vào trường bên phải.

Theo nhận xét của Steph, cú pháp đầy đủ là:

constant_1=VALUE constant_2=VALUE

Lưu ý rằng bạn không cần dấu '=' nếu bạn chỉ muốn # xác định một biểu tượng, thay vì đặt cho nó một giá trị (cho các #ifdefcâu lệnh)


2
Cảm ơn! Đối với bất kỳ ai quan tâm, cú pháp trông giống như "kVarOne = 5 myVar = 3.0" (không có dấu ngoặc kép), tôi đã tìm thấy nó bằng cách thử và sai. Ben, bạn có thể chỉnh sửa câu trả lời của mình để xác định điều đó không? Cảm ơn một lần nữa.
Steph Thirion

1
Câu trả lời tuyệt vời. Tôi vẫn còn tóc vì điều này. Cảm ơn bạn, cảm ơn bạn, cảm ơn bạn. +1 (Tôi ước nó có thể nhiều hơn)
Ali Parr

11
FYI, kể từ Xcode 3.2.4, "Macro tiền xử lý" ánh xạ tới GCC_PREPROCESSOR_DEFINITIONS và Xcode sẽ không cho phép bạn xác định người dùng nữa (vì nó đã có sẵn).
Cầu đất sét

11
Đây không còn là biểu tượng Bánh răng ở phía dưới bên trái mà thay vào đó là biểu tượng Dấu cộng ở phía dưới bên phải (của tab Cài đặt bản dựng của mục tiêu của bạn).
Jesse Smith

1
bạn nên cập nhật phản hồi này. không có biểu tượng bánh răng nữa
Radu Simionescu

86

Bạn không cần tạo cài đặt do người dùng xác định. Cài đặt tích hợp "Macro tiền xử lý" hoạt động tốt. văn bản thay thế http://idisk.mac.com/cdespinosa/Public/Picture%204.png

Nếu bạn có nhiều mục tiêu hoặc dự án sử dụng cùng một tệp tiền tố, hãy sử dụng Macro tiền xử lý không được sử dụng trong tiêu đề biên dịch trước để thay thế, sự khác biệt trong định nghĩa macro của bạn không kích hoạt thêm tập hợp tiêu đề biên dịch trước không cần thiết.


1
Bạn phải làm gì nếu phần này bị thiếu trong cài đặt bản dựng?
Kevin Laity

3
Làm những gì Ben Gotliebb đề nghị. Nhưng kể từ phiên bản 3.2.4 của Xcode, "Macro tiền xử lý" ánh xạ tới GCC_PREPROCESSOR_DEFINITIONS. Bạn không thể xác định người dùng một cái gì đó đã có sẵn.
Cầu đất sét

41

Như một phụ lục, nếu bạn đang sử dụng kỹ thuật này để xác định các chuỗi trong mục tiêu của mình, thì đây là cách tôi phải xác định và sử dụng chúng:

Trong Cài đặt bản dựng -> Macro tiền xử lý và có dấu gạch chéo ngược rất quan trọng trong định nghĩa:

APPURL_NSString=\@\"www.foobar.org\"

Và trong mã nguồn:

objectManager.client.baseURL = APPURL_NSString;

Cảm ơn giải pháp này, tôi đã tìm kiếm thứ gì đó CHÍNH XÁC như thế này, nhưng tràn ngăn xếp lại chứa đầy các giải pháp phức tạp.
David P

5

Bạn có thể sử dụng *_Prefix.pchtệp để khai báo các macro toàn dự án. Tệp đó thường nằm trong nhóm Nguồn khác của bạn .


3

Nó nằm trong "GCC 4.2 Preprocessing" (hoặc chỉ cần đặt "prepro" vào hộp tìm kiếm) ...

... tuy nhiên, đối với cuộc sống của tôi, tôi không thể làm cho nó hoạt động.

Tôi có cấu hình Gỡ lỗi và Bản phát hành tiêu chuẩn của mình và tôi muốn xác định DEBUG = 1 trong cấu hình gỡ lỗi. Nhưng sau khi thêm nó dưới dạng giá trị:

(trong cửa sổ cài đặt)> Macro tiền xử lý: DEBUG = 1

#if DEBUG
    printf("DEBUG is set!");
#endif 

... không bao giờ in / được gọi. Nó khiến tôi điên lên...


10
Thay vì # nếu DEBUG, hãy thử # nếu định nghĩa (DEBUG) hoặc DEBUG #ifdef
Simo Salminen

Thật kỳ lạ, tôi thấy mình ở đây vào năm 2019, với Swift và Xcode 10.3. Bất kỳ ai có cùng vấn đề được mô tả ở trên có thể thấy điều này hữu ích; nó chắc chắn đã đưa tôi #if DEBUGvào cuộc sống :) stackoverflow.com/a/47395485/2778502
jeff-h

1

Đáp lại nhận xét của Kevin Laity (xem câu trả lời của cdespinosa), về việc phần GCC Preprocessing không hiển thị trong cài đặt bản dựng của bạn, hãy đặt Active SDK thành phần có nội dung (Base SDK) sau phần đó và phần này sẽ xuất hiện. Bạn có thể thực hiện việc này bằng cách chọn menu Dự án> Đặt mục tiêu hoạt động> XXX (SDK cơ sở). Trong các phiên bản khác nhau của XCode (SDK cơ sở) có thể khác nhau, chẳng hạn như (Thiết lập dự án hoặc Mặc định dự án).

Sau khi bạn nhận được phần này xuất hiện, bạn có thể thêm định nghĩa của mình vào Macro bộ xử lý thay vì tạo cài đặt do người dùng xác định.


1

Đối với dự án Xcode 9.4.1 và C ++. Thêm const char*Macro tiền xử lý vào cả bản dựng Gỡ lỗiBản phát hành .

  1. Chọn dự án của bạn

    chọn dự án

  2. Chọn Cài đặt bản dựng

    chọn cài đặt bản dựng

  3. Tìm kiếm " Macro tiền xử lý "

    search1 search2

  4. Mở danh sách tương tác

    mở danh sách tương tác

  5. Thêm macro của bạn và đừng quên thoát khỏi báo giá

    thêm đường dẫn

  6. Sử dụng trong mã nguồn như phổ biến const char*

    ...
    #ifndef JSON_DEFINITIONS_FILE_PATH
    static constexpr auto JSON_DEFINITIONS_FILE_PATH = "definitions.json";
    #endif
    ...
    FILE *pFileIn = fopen(JSON_DEFINITIONS_FILE_PATH, "r");
    ...

0

Bạn có thể sao chép mục tiêu có phần tiền xử lý, đổi tên nó thành bất kỳ tên nào bạn muốn, sau đó thay đổi giá trị macro Bộ xử lý trước của bạn.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.