Windows - C ++ Build Environment ved hjælp af MinGW-w64 og Boost.Build

Indlæg af Hanne Mølgaard Plasc

Problem



Jeg bærer i øjeblikket et af mine projekter til GCC, og jeg bruger minGW-w64-projektet til at opnå dette, da jeg har brug for både x64 og x86-support.


Jeg har dog ramt et problem med at opbygge mit byggemiljø selv. Mit projekt bruger i øjeblikket Boost C ++-biblioteker, og for at gøre byggeprocessen lettere bruger jeg Boost. Byg i mit projekt også (da det gør integrationen enkel).


Under MSVC er det fint, fordi jeg kan gøre følgende fra kommandolinjen:


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


MinGW-w64 gør dette 'problematisk', da 32-bit og 64-bit værktøjskæder er anbragt i separate mapper. (Henholdsvis C: \ MinGW32 og C: \ MinGW64).


Er det muligt at oprette Boost. Opbygge på en måde, at den vil vælge den rigtige værktøjskæde baseret på adressemodelflagget? Hvis ikke, hvad er min næste bedste mulighed?


REDIGERE:


Hvis det hjælper, bruger jeg rubenvb 4.6.3-1 fra MinGW-w64-hjemmesiden i mappen 'Personlige bygg' (jeg bruger disse bygger især, da jeg vil forsøge at få min kode til at analysere - men ikke kompilere - under Clang).


REDIGERE:


En løsning, jeg lige har tænkt på, ville være at 'manuelt' indstille PATH'en til at pege på den korrekte værktøjskæde før kompilering, men dette tilføjer et ekstra komplikationslag til min byggeproces, som jeg gerne vil undgå. Ideelt set vil jeg gerne Vær så let som MSVC, selvom jeg forstår det, er det måske ikke muligt. I værste fald antager jeg, hvad jeg lige har foreslået, ville virke, og jeg ville bare nødt til at tilføje scripts for at indstille PATH'en korrekt, før jeg påkalder Boost.Build. Det ville betyde, at hardcoding en vej selvom, som jeg ikke vil gøre ...

Bedste reference


Du kan vælge ethvert Boost.Build værktøjssæt udvalgt ud fra et sæt af matchende egenskaber ved at tilføje et værktøjssæt krav (med toolset.add-requirements regel). Der er indbygget støtte til dette i nogle værktøjer, som darwin.jam (Xcode), men vi har desværre ikke tilføjet det til gcc værktøjssættet endnu. Men du kan bruge den samme minimale kode i din user-config.jam]], når de erklærer værktøjerne. For din sag kan det se sådan ud:


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 ;


Dette medfører, at tilføjelsen af ​​det givne betingede krav til alle målene. Hvilket har den virkning at vælge et bestemt mål for et bestemt angivet værktøjssæt efter behov.


..For at nævne .. Selv om dette skaber to forskellige værktøjsdeklarationer, vælges standardet stadig dynamisk. Man ville bruge den sædvanlige kommandolinje:


b2 toolset=gcc address-model=64


At bruge 64 bit mingw compiler.

Andre referencer 1


Da MinGW-binarierne har forskellige navne, skal du kunne medtage kabinekataloger i stien og derefter tilføje to forskellige værktøjer i konfigureringsfilen, hvor du angiver de nøjagtige navne på de binære filer (undtagen stien).


I konfigurationsfilen tilføjes følgende baseret på formatet



  ved hjælp af gcc: [[version]]: [[c ++ - compile-command]]: [[compiler options]];



using gcc : 32 : mingw-w32-1.0-bin\_i686-mingw ;
using gcc : 64 : mingw-w64-1.0-bin\_i686-mingw ;


Du skal så kunne ringe til b2 som denne:


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

Andre referencer 2


MinGW-w64 kan opbygge 32 og 64 bit binære filer.


Jeg bruger tdm-mingw med mingw64 toolchan og sender kun -m32 eller -m64 til linker/compiler for at vælge version. I standard er 64 bit binære filer opbygget.