2012-01-09 10 views
7

Şu anda projelerimden birini GCC'ye taşıyorum ve hem x64 hem de x86 desteğine gereksinim duyduğumdan bunu gerçekleştirmek için MinGW-w64 projesini kullanıyorum.C++ MinGW-w64 ve Boost.Build'i kullanarak Oluşturma Ortamı

Yapım ortamımı ayarlarken bir sorunla karşılaştım. Projem şu anda Boost C++ kütüphanelerini kullanıyor ve yapı sürecini kolaylaştırmak için projemde de Boost.Build'i kullanıyorum (entegrasyonu kolaylaştırıyor). 32-bit ve 64-bit toolchain yerleştirilmiştir olarak,

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

MinGW-w64 bu 'sorunlu' yapıyor: Ben komut satırından aşağıdakileri yapabilirsiniz çünkü

altında MSVC bu, gayet ayrı dizinlerde. (Sırasıyla C: \ MinGW32 ve C: \ MinGW64).

Adres modeli bayrağına göre doğru takım zincirini seçecek şekilde Boost.Build kurulabilir mi? Değilse, bir sonraki en iyi seçenek nedir?

DÜZENLEME:

Eğer yardımı olacaksa

, ben 4.6.3-1 yılında MinGW-w64 web sitesinden kurar rubenvb kullanıyorum klasörü (kullanıyorum bu ben istediğim gibi özellikle kurar "Kişisel oluşturur" Kodumu ayrıştırmaya çalışıyorum - ancak Clang altında derleme değil -.

DÜZENLEME: Sadece düşünce

bir çözüm 'elle' derleme önce doğru toolchain işaret edecek PATH set, ancak bu benim yapı sürecine komplikasyon bir kat daha ekler olacaktır ki ben ediyorum kaçınmak ister. İdeal olarak, MSVC için olduğu kadar kolay olmasını isterim, bunun mümkün olmadığını anladım. En kötü durumda, sadece ne önerdiğimi varsayardım, ve Boost.Build'i çağırmadan önce PATH'ı doğru bir şekilde ayarlamak için komut dosyaları eklemem gerekir. Bunu yapmak istemediğim bir yolu hardcoding anlamına gelirdi ...

cevap

5

Herhangi bir Boost.Build araç setini, bir araç seti gereksinimi ekleyerek (toolset.add-requirements kuralıyla) eşleşen özellikler kümesine göre seçilebilir. Bunun için darwin.jam (Xcode) gibi bazı araç setlerinde yerleşik destek var, ancak maalesef bunu henüz gcc araç setine eklemedik. Ancak, araç takımlarını bildirirken user-config.jam'unuzda aynı minimum kodu kullanabilirsiniz.Eğer böyle görünebilir harf için:

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 ; 

Bu tüm hedeflerini verilen şartlı şart ilave etkisine sahiptir. Bu, belirli bir beyan edilen araç seti için belirli bir hedefi seçmenin etkisine ihtiyaç duyar.

.. Bahsetmeyi unutmayın .. Bu, iki farklı araç seti bildirimi oluştursa da, varsayılan değer yine de dinamik olarak seçilir. Bir zamanki komut satırı kullanılabilir:

b2 toolset=gcc address-model=64 

64 bit mingw derleyici kullanın.

3

MinGW ikili dosyaları farklı isimlere sahip olduklarından, kabine dizinleri yol içine ekleyebilmeli ve sonra iki farklı araç setini sıkışmalara ekleyebilmelisiniz. ikili dosyaların tam isimlerini belirttiğiniz yapılandırma dosyası (yol hariç). [Sürüm]: [C++ - derlemek-komuta]: config dosyasında

gcc kullanımını formatında

dayalı aşağıdaki ekleyin [derleyici seçenekleri];

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

Sonra böyle b2 çağırmak mümkün olmalıdır:

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

Takım zincirine önek eklemeden benzer bir şey yapmanın bir yolu var mı? 'Varsayılan' toolchain adını kullanmak ve adres-model bayrağı tarafından algılanan 32/64-bit parçasına sahip olmak isterim. – RaptorFactor

+0

, ör. b2 toolet = gcc address-model = 32 – RaptorFactor

+0

Bildiğim kadarıyla, adres-model açıkça mingw-gcc argümanı olarak desteklenmiyor. Durumunuzda adres-model = 32'nin neden daha iyi olduğunu soruyorum? – Kristofer

0

MinGW-w64 32 ve 64 bit ikilileri inşa edebilirsiniz.

mingw64 toolchan ile tdm-mingw kullanıyorum ve sürümü seçmek için linker/derleyiciye yalnızca -m32 veya -m64'u iletiyorum. Varsayılan olarak 64 bitlik ikili dosyalar oluşturulur.

+0

Ne yazık ki tüm MinGW -w64 yapıları bunu yapabilir.Benim zaten belirtildiği gibi, ben multilib olmayan rubenvb tarafından yapıları kullanıyorum, bu yüzden bir tane 32-bit toolchain için biri ve 64-bit toolchain için bir tane var. 64 bit araç zinciri yalnızca 64 bit ikili dosyalar oluşturabilir ve 32 bit araç zinciri yalnızca 32 bitlik ikili dosyalar oluşturabilir. – RaptorFactor

İlgili konular