2012-06-21 37 views
6

Tôi đang cố gắng viết một số wrapper bằng CGo cho ENet.Biên soạn có điều kiện trong Go

Khi tôi cố gắng biên dịch trình bao bọc của mình trên máy Mac, thư viện cũ hơn và có giao diện hơi khác một chút. 99% của mã là giống như chỉ một vài C cuộc gọi cần phải thay đổi.

Cách tốt nhất để giải quyết vấn đề như thế này trong Go?
Có cách nào để thực hiện việc biên dịch có điều kiện hoặc nhập khẩu có điều kiện không?

Trả lời

1

Đi không có trình biên dịch có điều kiện hoặc nhập khẩu có điều kiện. Xử lý sự khác biệt về loại trong mã C.

Are the [Go] authors opposed to preprocessing?

+0

Thực sự không có biên dịch có điều kiện sử dụng hậu tố tên tệp như câu trả lời của andyBallholm. –

+1

Downvoters sẽ ghét :). Nghiêm túc, mặc dù @peterSO có câu trả lời đúng cho vấn đề cụ thể của tôi. Hóa ra điều Mac là một cá trích đỏ. Vấn đề thực sự là với các phiên bản thư viện, mà chỉ có thể được phát hiện dưới dạng '# define' trong các tệp tiêu đề. '_darwin.go' hoặc' _linux.go' sẽ chỉ che giấu vấn đề cho đến khi một trong số chúng cập nhật thư viện ENet của chúng với sự thay đổi không tương thích ngược. –

14

Tách riêng nội dung cụ thể cho nền tảng thành một tệp riêng biệt, ví dụ: stuff.go

Bây giờ thay thế stuff.go với phiên bản dành cho các nền tảng khác nhau, như stuff_darwin.go (dành cho Mac), stuff_windows.go, stuff_linux.go vv

Nếu một tập tin có một hậu tố như thế , lệnh đi sẽ chỉ biên dịch nó trên nền tảng được chỉ định.

+0

Điều đó thật sự rất hay. –

+8

Tài liệu trong "Xây dựng Constriant" trong [tổng quan] (http://golang.org/pkg/go/build/#overview) của gói go/build. – Sonia

+1

Đó thực sự là một giải pháp tuyệt vời (nó phù hợp với Go). –

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