2013-08-02 20 views
16

Mi scuso se questa è una domanda piuttosto stupida, ma sto lavorando per ottenere C++ configurato in NetBeans (che richiede MinGW). Dice nella documentazione per la parte C/C++ di NetBeans che funzionerà solo con make di MSYS, non con la marca di MinGW. Volevo sapere la differenza tra i due, quindi ho cercato su Google e ho trovato this question che dice che ci sono due marche diverse incluse con MinGW, mingw32-make (marca di MinGW) e make (marca di MSYS). Poi ho scavato un po 'sul wiki del sito MinGW e ho trovato questo post sepolto nella FAQ:Quali sono le differenze tra la marca di MinGW e la marca di MSYS e quale è disponibile dove?

Il "nativo" (vale a dire: MSVCRT dipendente) porto di marca è carente in qualche funzionalità e ha modificato la funzionalità a causa di la mancanza di POSIX su Win32. Esiste anche una versione di make nella distribuzione MSYS che dipende dal runtime MSYS. Questa porta funziona più come fare era destinato a funzionare e dà meno mal di testa durante l'esecuzione. In base a ciò, gli sviluppatori/manutentori/responsabili del pacchetto MinGW hanno deciso che è rinominare la versione nativa in modo che sia la versione "nativa" sia la versione MSYS possano essere presenti contemporaneamente senza la collisione del nome file .

Quindi, se ci sono due copie di marca, quale è disponibile nella shell MSYS e quale è disponibile in cmd.exe? Quali sono le principali differenze tra i due?

risposta

14

La principale differenza pratica tra le due marche, la versione MSYS e la versione nativa, è che la prima utilizza la shell MSYS per eseguire i suoi comandi, mentre la successiva utilizza cmd. Questo significa che con la versione MSYS di make puoi scrivere le ricette più o meno come faresti con il sistema Unix o Linux, mentre con la versione nativa di Windows potresti dover fare le cose in modo diverso. Per la semplice esecuzione dei comandi funzionano allo stesso modo, ma per le azioni più complesse le ricette dovranno differire perché cmd ha una sintassi molto diversa rispetto alle shell Unix.

Ad esempio si potrebbe gestire ricorsiva costruisce così con MSYS fare:

recurse-subdirs: 
    for i in $(SUBDIRS);   \ 
    do        \ 
     cd $$i && make all || exit; \ 
    done 

Mentre con la versione nativa di marca dovreste fare qualcosa di simile, invece:

recurse-subdirs: FORCE 
    for %%i in ($(SUBDIRS)) do  \ 
     cd %%i && make all || exit 

Con MSYS rende anche sicuro che sono disponibili i normali comandi Unix (ad esempio rm *.o), mentre con la versione nativa si preferisce utilizzare i comandi di Windows (ad esempio del *.o).

Quale versione di marca è disponibile dipende da come si imposta PATH. Se entrambe le versioni di make, una di nome make e una di nome mingw32-make, possono essere trovate cercando PATH allora entrambi i comandi saranno disponibili. Questo è vero sia che tu stia utilizzando la shell MSYS o cmd.