2013-08-02 11 views
16

これはちょっとばかげた質問ですが、NetBeans(MinGWが必要)でC++を設定する作業をしています。 NetBeansのC/C++部分のドキュメントでは、MinGWのmakeではなくMSYSのmakeでしか動作しないと言います。私は2つの違いを知りたかったので、私はグーグルでthis questionと出てきて、MinGWにはmingw32-make(MinGWのmake)とmake(MSYSのmake)という2つの異なるメーカーが含まれています。私は、MinGWのウェブサイトのウィキに少し掘っとFAQに埋もれこの記事を見つけました:MinGWのmakeとMSYSのmakeとの相違点は何ですか?

「ネイティブ」(例:MSVCRTに依存)メイクのポートは、いくつかの 機能に欠けているとのための機能を変更しましたWin32でのPOSIX の欠如。また、MSYSランタイムに依存するMSYSディストリビューション のmakeのバージョンも存在します。このポートは、make が動作するように意図されており、実行中に頭痛を軽減します。 MinGW開発者/保守担当者/パッケージャは ファイル名の衝突がなく、ネイティブバージョンの名前を変更して、ネイティブバージョン とMSYSバージョンの両方が同時に存在できるようにすることを決定しました( )。

したがって、MSYSシェルで利用できるmakeのコピーが2つあり、どちらが利用できるのですかcmd.exe?両者の主な違いは何ですか?

答えて

14

MSYSバージョンとネイティブバージョンの主な違いは、MSYSシェルがMSYSシェルを使用してコマンドを実行し、後でcmdが使用されることです。つまり、MSYS版のmakeでは、UnixやLinuxシステムと同じようにレシピを書くことができますが、ネイティブWindows版では別のことをする必要があります。単純なコマンド実行の場合も同様ですが、cmdはUnixシェルとは構文がはるかに異なるため、より複雑なアクションの場合はレシピが異なる必要があります。たとえば、あなたは再帰的にはMSYSと、次のようにビルドを扱うかもしれません

は作る:

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

を作るのネイティブバージョンであなたの代わりにこのような何かをする必要があると思いますが:で

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

MSYSは、通常のUnixコマンドが利用可能であると仮定することも安全にします(例えば、rm *.o)。ネイティブmakeでは代わりにWindowsコマンド(例えば、del *.o)を使用します。

利用可能なメイクのバージョンは、PATHの設定方法によって異なります。両方のバージョンのmake、makeという名前のものとmingw32-makeという名前のものがある場合、PATHを検索すると両方のコマンドが利用可能になります。これはMSYSシェルを使用している場合でもcmdを使用している場合でも当てはまります。

関連する問題