2009-07-13 36 views
6

Tôi đang viết một thư viện nhỏ trong C++ mà tôi cần để có thể xây dựng trên một vài nền tảng khác nhau, bao gồm iPhone, Windows, Linux, Mac và Symbian S60. Tôi đã viết hầu hết các mã để nó là nền tảng thuyết bất khả tri nhưng có một số phần phải được viết trên cơ sở mỗi nền tảng. Hiện tại tôi thực hiện điều này bằng cách bao gồm một tiêu đề khác tùy thuộc vào nền tảng hiện tại nhưng tôi đang gặp khó khăn trong việc xác định điều này vì tôi không chắc chắn định nghĩa tiền xử lý nào được xác định cho tất cả các nền tảng. Đối với các cửa sổ, tôi thường có thể dựa vào việc xem WIN32 hoặc _WIN32. Đối với Linux, tôi có thể dựa vào việc xem _UNIX_ nhưng tôi ít chắc chắn hơn về các nền tảng khác hoặc các biến thể 64 bit của chúng. Có ai có một danh sách các định nghĩa khác nhau được tìm thấy trên nền tảng hoặc tôi sẽ phải nghỉ mát đến một tập tin cấu hình hoặc tham số gcc?Các định nghĩa tiền xử lý nền tảng C

Trả lời

9

Tôi có this sourceforge pre-compiler trang trong dấu trang của mình.

+0

Tôi đã chỉnh sửa bạn liên kết để trỏ đến phiên bản wiki mới được cập nhật, mặc dù Google luôn trỏ đến phiên bản cũ . – rubenvb

+0

OK, cảm ơn. –

0

Không có tiêu chuẩn C hoặc C++ nào xác định các biểu tượng như vậy, vì vậy bạn sẽ có lòng thương xót của việc triển khai C hoặc C++ cụ thể. Một danh sách các biểu tượng thường được sử dụng sẽ là một điều hữu ích để có, nhưng tiếc là tôi đã không có một.

0

Tôi không nghĩ rằng tồn tại một danh sách chung của nền tảng xác định đánh giá bởi thực tế là mỗi thư viện đa nền tảng tôi đã thấy có một cấu hình đặc biệt. Nhưng bạn có thể xem xét nhìn vào những người sử dụng bởi các thư viện khá cầm tay như libpng, zlib, vv

Dưới đây là một trong những sử dụng bởi libpng

0

Các định nghĩa sẽ được hoàn toàn lên đến nhà cung cấp trình biên dịch của bạn. Nếu bạn đang sử dụng cùng một trình biên dịch (nói, gcc) trên tất cả các nền tảng của bạn thì bạn sẽ có một chút thời gian dễ dàng hơn của nó.

Bạn cũng có thể muốn thay vào đó tổ chức dự án của mình sao cho hầu hết các tệp .h không phụ thuộc vào nền tảng. Tách tệp triển khai của bạn (tệp cpp) thành các tệp riêng biệt; một cho những thứ không đặc thù và một cho mỗi nền tảng. Các nền tảng cụ thể có thể bao gồm các tiêu đề 'riêng tư' chỉ có ý nghĩa cho nền tảng đó. Bạn có thể phải thực hiện các chức năng của bộ điều hợp để nhận được một cái gì đó như thế này để làm việc 100% (khi hệ thống libs có các đối số hơi khác nhau), nhưng tôi thấy nó thực sự hữu ích ở cuối và mang lại một nền tảng mới dễ dàng hơn nhiều trong tương lai.

0

Nếu bạn muốn xem xét thông qua những biểu tượng tiền xử lý mặc định cho một hệ thống nhất định mà bạn có GCC (ví dụ như Mac OS X, iOS, Linux), bạn có thể có được một danh sách đầy đủ từ các dòng lệnh như sau:

echo 'main(){}' | cpp -dM 

Tuy nhiên, thường được sử dụng hạn chế, khi giai đoạn biên dịch hoạt động, hầu hết các ký hiệu xác định hệ điều hành và loại CPU chỉ có hệ thống lưu trữ trình biên dịch chứ không phải hệ thống đang được nhắm mục tiêu (ví dụ: khi biên dịch chéo cho iOS). Trên Mac OS X và iOS, đúng cách để xác định các đặc điểm thời gian biên dịch của hệ thống đang được nhắm mục tiêu là

#include <TargetConditionals.h> 

này sẽ đón TargetConditionals.h từ Cương lĩnh và SDK hiện đang sử dụng, và sau đó bạn có thể xác định (ví dụ) endianness và một số đặc điểm khác từ một số Macro. (Xem qua TargetConditionals.h để xem loại thông tin nào bạn có thể thu thập.)

+0

Mặc dù việc kiểm tra đầu ra -dM có thể giúp, nhưng nó không thể đảm bảo nhiều thông tin như trang wiki sourceforge trước. – rubenvb

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