2012-01-09 38 views
7

Tôi hiện đang chuyển một dự án của mình sang GCC và tôi đang sử dụng dự án MinGW-w64 để thực hiện điều này vì tôi yêu cầu hỗ trợ x64 và x86.Môi trường xây dựng C++ sử dụng MinGW-w64 và Boost.Build

Tôi đã gặp sự cố khi thiết lập môi trường xây dựng của mình. Dự án của tôi hiện đang sử dụng thư viện Boost C++, và để làm cho quá trình xây dựng dễ dàng hơn, tôi cũng sử dụng Boost.Build trong dự án của tôi (vì nó làm cho việc tích hợp trở nên đơn giản).

Dưới MSVC này là tốt, vì tôi có thể làm như sau từ dòng lệnh:

b2 toolset=msvc address-model=32 # compile as 32-bit 
b2 toolset=msvc address-model=64 # compile as 64-bit 

MinGW-w64 đang thực hiện này có vấn đề '', như phiên bản 32-bit và 64-bit dãy công cụ được đặt trong các thư mục riêng biệt. (C: \ MinGW32 và C: \ MinGW64 tương ứng).

Có thể thiết lập Boost.Build theo cách nó sẽ chọn chuỗi công cụ chính xác dựa trên cờ mô hình địa chỉ không? Nếu không, lựa chọn tốt nhất tiếp theo của tôi là gì?

EDIT:

Nếu nó giúp, tôi đang sử dụng rubenvb 4.6.3-1 xây dựng từ trang web của MinGW-w64 trong "Cá nhân xây dựng" thư mục (Tôi đang sử dụng những xây dựng đặc biệt là khi tôi muốn thử lấy mã của tôi để phân tích cú pháp - nhưng không biên dịch - dưới Clang).

EDIT:

Một giải pháp tôi chỉ nghĩ đến việc sẽ được 'bằng tay' thiết lập PATH để trỏ đến các toolchain chính xác trước khi biên soạn, tuy nhiên điều này cho biết thêm thêm một lớp phức tạp cho quá trình xây dựng của tôi mà tôi muốn muốn tránh. Lý tưởng nhất là tôi muốn nó được dễ dàng như nó là cho MSVC, mặc dù tôi hiểu điều này có thể không được. Trong trường hợp xấu nhất, tôi giả sử những gì tôi vừa gợi ý sẽ làm việc, và tôi sẽ chỉ cần thêm các kịch bản để đặt đúng PATH trước khi gọi Boost.Build. Điều đó có nghĩa là hardcoding một con đường mặc dù, mà tôi không muốn làm ...

Trả lời

5

Bạn có thể thực hiện bất kỳ bộ công cụ Boost.Build nào được chọn dựa trên bộ thuộc tính phù hợp bằng cách thêm yêu cầu bộ công cụ (với quy tắc toolset.add-requirements). Có một số hỗ trợ tích hợp cho một số bộ công cụ như darwin.jam (Xcode), nhưng tiếc là chúng tôi chưa thêm vào bộ công cụ gcc. Nhưng bạn có thể sử dụng cùng một mã tối thiểu trong số user-config.jam khi khai báo các bộ công cụ.Đối với các bạn trường hợp nó có thể trông như thế này:

import toolset ; 

using gcc : gcc-4.6.3~32 : /path/to/32bit/mingw/gcc ; 
using gcc : gcc-4.6.3~64 : /path/to/64bit/mingw/gcc ; 

# Add a global target requirements to "choose" the toolset based on the address model. 
toolset.add-requirements <toolset>gcc-4.6.3~32:<address-model>32 ; 
toolset.add-requirements <toolset>gcc-4.6.3~64:<address-model>64 ; 

này có tác dụng bổ sung các yêu cầu điều kiện cho tất cả các mục tiêu. Trong đó có tác dụng lựa chọn một mục tiêu cụ thể cho một bộ công cụ khai báo cụ thể khi cần thiết.

..Không đề cập đến .. Điều đó mặc dù điều này đang tạo hai khai báo công cụ khác nhau mặc định vẫn được chọn động. Một người sẽ sử dụng dòng lệnh thông thường:

b2 toolset=gcc address-model=64 

Để sử dụng trình biên dịch 64 bit mingw.

3

Vì các tệp nhị phân MinGW có tên khác nhau, bạn sẽ có thể bao gồm các thư mục gian hàng vào đường dẫn và sau đó thêm hai bộ công cụ khác nhau vào mứt tệp cấu hình, nơi bạn chỉ định tên chính xác của các tệp nhị phân (không bao gồm đường dẫn).

Trong tập tin cấu hình thêm phần sau đây dựa trên định dạng

sử dụng gcc: [phiên bản]: [C++ - biên dịch-command]: [biên dịch tùy chọn];

using gcc : 32 : mingw-w32-1.0-bin_i686-mingw ; 
using gcc : 64 : mingw-w64-1.0-bin_i686-mingw ; 

Sau đó, bạn sẽ có thể gọi b2 như thế này:

b2 toolset=gcc-32 
bt toolset=gcc-64 
+0

Có cách nào để thực hiện điều gì đó tương tự mà không cần thêm tiền tố vào chuỗi công cụ không? Tôi muốn sử dụng tên chuỗi công cụ 'mặc định' và có phần 32/64-bit được cờ mô hình địa chỉ phát hiện. – RaptorFactor

+0

ví dụ: b2 toolset = gcc address-model = 32 – RaptorFactor

+0

Không phải là tôi biết, mô hình địa chỉ rõ ràng không được hỗ trợ làm đối số cho mingw-gcc. Tôi có thể hỏi tại sao sử dụng address-model = 32 tốt hơn trong trường hợp của bạn? – Kristofer

0

MinGW-w64 có thể xây dựng 32 và 64 bit nhị phân.

Tôi sử dụng tdm-mingw với mingw64 toolchan và chỉ vượt qua -m32 hoặc -m64 để trình liên kết/trình biên dịch để chọn phiên bản. Mặc định 64 bit nhị phân được xây dựng.

+0

Thật không may, không phải tất cả MinGW Như đã nêu trong câu hỏi của tôi, tôi đang sử dụng các bản build bởi rubenvb không phải là multilib, vì vậy tôi có hai bản cài đặt, một cho 32-bit toolchain, và một cho toolchain 64-bit. Chuỗi công cụ 64 bit chỉ có thể xây dựng các tệp nhị phân 64 bit và chuỗi công cụ 32 bit chỉ có thể xây dựng các tệp nhị phân 32 bit. – RaptorFactor

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