Windows環境でのmakeコマンドの利用方法について

このQ&Aのポイント
  • Windowsの開発環境でmakeコマンドを使用する方法について説明します。
  • Windowsの場合、基本的にはmakeコマンドが存在しないため、別途取り寄せる必要があります。
  • Rtools、bcc55、Gow(Gnu on Windows)などが利用可能なmakeコマンドの候補となります。環境を適切に設定し、適切なmakeコマンドが使われるようにする必要があります。
回答を見る
  • ベストアンサー

Windows環境へのmakeについて

Windowsの開発環境でmakeを使用したいと思います。シェルでフォルダを選んでmakeコマンドを投入するとmakefileの指示に従ってそのフォルダのソースファイルなどを集めて実行ファイルを作成するところまでやってくれるというものです。 Linuxはmakeコマンドが当然ながら普通に利用できるのでその方向に沿ってシェルに依存したmakefileを作成すると思います。Windowsの場合は基本はmakeコマンドがないので、別途、取り寄せるのだと思います。 今の状態で、Windowsのパワーシェルでwhich make -a とすると、Rtools, bcc55, Gow(Gnu on Windows)のmake.exeが出てきます。適切なmakeが最初に呼ばれるように環境を編集してあとはmakefileを編集すればいいということなのでしょうか。Windowsにはnmake, cmakeなどいろんなものもありますが。コンパイラはgfortranとかgccなどのGNUのコンパイラで、これはシェルからコンパイルできるようになっています。Visual studio系はすぐには使いません。 Windowsのシェルでmakeを利用する手順を教えて頂きたいと思います。よろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • wormhole
  • ベストアンサー率28% (1620/5655)
回答No.1

あなたがご自分で書かれているようにWindowsには標準的なmakeはありませんから。、あなたが別途入手したどのmakeを使いたいのかによって話は変わってくると思うのですが?

skmsk1941093
質問者

お礼

回答ありがとうございます。私は自分から進んでmakeをインストールしようと思ったことはなく、何かをインストールしたら一緒についてくるということはありました。 今、シエルでwhich make -a とすると、Borlandのc++コンパイラ(bcc55), Gow(Gnu on Windows)が検出されました。後者の方が先に呼び出されるように環境変数を編成して、そのあとgnu系のコンパイラ(gcc, g++, gfortran)を使えるようにしたいと思います。gcc, g++, gfortranはシェルから呼び出すことができます。Gowのmakeを使うことを前提とするとどうなるでしょうか。Gowのmake とGnuコンパイラ群は全く別のところから提供されたものですが。

関連するQ&A

  • makeで環境に応じ処理を変える際、綺麗な書き方

    とあるプロジェクトをビルドしようとしていて、makefileを書いています。 make installで、環境に応じ処理が適切に切り替わるようにしようとしてますが、 ifdef, ifeq, もしくはシェルコマンドのif以外で良い方法はないでしょうか。 具体的に一例をあげると、scp, sshが使える環境(typeで判断)と、ftp, telnetしかない 環境で、インストール(コピー)に使うコマンドを変えたいという感じです。 (実際はもっと違いますが、OSにインストールされてるコマンドの中で最適なものを 使いたいという意味では同じ) ・ifdef, ifeqの場合 make実行直後のmakefile解析時に評価されるため、makefileに分岐の条件になる定数を 宣言するか、手動でmake install PARAMXXX=VALUEXXXのように書くしかなく、 makeのお任せ感が弱まる。 手順書に書かないといけないとすると、その手間の方がキツイ。 しかし、シェルのif文のように、改行をエスケープする'\'を乱発しなくてもよいので makefileの見た目は綺麗になる ・シェルのifの場合 シェルコマンドがtest部分に使え、しかもターゲット作成コマンド実行時に評価される ので、コマンドの有無を調べて条件分岐という今回のような趣旨に合う。 しかし、各コマンドは一行で完結してないといけないという制約のため、比較的長めの 処理(ビルドした内容のインストールなど)は、'\'の連続でmakefileが汚くなる。

  • Windows7のコマンドラインでのnmake

    標題のようにWindows7のコマンドラインでnmakeを利用したいと思います。ソースプログラムを作成してコンパイルするということが基本だと思っています。 例えば、wave.fというフォートランのソースをgfortranでコンパイルしてwave.oというオブジェクトファイルを作成し、wave.exeを生成するというような動作をmakefileで実行する実験をしているのですが、エラーとなります。 ○ 以下に test.mak というmakefileを作成しました。いろんなサンプルファイルを参考にしてこのような動作かなと思って作成しました。右の←以下は私はこういうつもりで書いたというものです。 FC = gfortran          ←コンパイラ FFLAGS = -Wall ←オプション objects=wave.o         ←オブジェクト名 # wave: $(objects) $(FC) $(FFLAGS) $(objects) -o wave←コンパイル # wave: $(objects) ← オブジェクトファイルを集めて実行ファイルを作成する。 # clean :       ← はじめからやり直すためにオブジェクトファイルを削除する(クリーンにする)。 rm *.o    ← 削除 ○実行 nmake test.mak あるいは nmake -f test.mak などです。 結果は、NMAKE: fatal error U1073: 'wave.o'のビルドの方法が指定されていません。stop. gfortran -Wall wave.o -o wave というところが、オブジェクトファイルwave.oを使って実行ファイルwaveを作成するという意味なので、wave.fというファイルを探しだしてコンパイルしてwave-oを生成する、という筋書きになっていると思っていました。 昔からmakeが苦手なのでちょっと時間を取って考えているところです。 test.makのどこが間違っているのでしょうか。添削をお願いしたいのですが。 よろしくお願いします。Cのカテゴリの方も十分ご存知かと思ったのでこちらに書きました。

  • Windowsのmakeについて特にpython

    ソースプログラムを実行するための環境を作るmakeについてお尋ねします。Linuxなどでは、OSをインストールした時点で1つ有効なmakeがg++, gcc等で使用することを目指して利用できるようになっていると思います。アプリのインストールでさえmakeですね(./configure, make cleanとかの定型処理)。Windowsだとmakeを提供する元がいっぱいあってプロンプトでwhere make とすると4つぐらい出てきます。そこで質問なのですが、makeという操作は提供元によって全然文法その他の仕様が違うものなのでしょうか。つまり、一般性が高いmakefileというものあるのか?という質問にもなりますが。コマンドプロンプトでmakeをやるとpathの最初に出てくるmakeが呼ばれるようです。Windowsのmakeは一般論では何も言えないでしょうか。大昔,マイクロソフトはnmakeで名前を変えて唯一のものとして確定していたようですが。 さらにpython3.6についてお尋ねしたいと思います。あるプログラムのソースをダウンロードして、広げてみるとソースファイル軍とmakefileがあり、makefileの冒頭に、 ## The present Makefile is a pure configuration file, in which ## you can select compilation options. Compilation dependencies ## are managed automatically through the Python library SConstruct. 上記はmakeの一般論のあとPythonでもライブラリがあれば使えるという風に読める記述があります。そもそもPythonってインタプリターとかソースにpythonコマンドで利用するということであり、実行ファイルは作らないものだと思っていたのでどういうことだろうと思うのですが。makefileをmakeで呼び出して利用するにしてもどのmake.exeでもいいってことではないと思うのですが。pythonで使用するmakefileということですが。 よろしくお願いします。

  • win版インテルコンパイラnmakeの括弧について

    linux版インテルコンパイラ(icc)を使っているmakefileをwindows版インテルコンパイラ(icl)で使えるように書きかえているのですが、コマンドプロンプトでどうもnmakeがうまくいきません。 nmakeをしたときのエラーメッセージは、 makefile(22) : fatal error U1001: 構文エラー : 無効な文字 '{' がマクロ中にありま す。 です。makefile22行目は $(PROGRAM) : ${OBJS} $(CC) $(CFLAGS) -o $@ ${OBJS} $(LIBS) なのですが、コマンドプロンプトで{}の括弧は使えないのでしょうか。 またうまくいくようにするにはどうすればよろしいでしょうか。

  • WindowsでのGNUを用いたプログラム開発環境

    Windows10で(できれば)パワーシェルを使ってプログラム開発環境を再構築したいと思っていました。プログラム開発環境はそれ自体がなんとなく危ういというのではだめで、hello worldを表示できた、というレベルを超えたものが必要ではないかと思います。実際hello worldはOKなので並列処理に関する初等的なサンプルのソースを実行しようとしたらダメでした。それを具体的にフィックスする方法はなくはないようですが、対症療法的です。Windowsでのプログラム開発はそもナンセンスかもしれませんが。MSYS2でインストールしてパワーシェルで環境変数を付け足してやってみるのもダメでした。パワーシェルでのscoopコマンドによるgccのインストールも具合が悪いです。ウィンドウズでのGNU系のコンパイラを使った開発環境で比較的安定しているものを構築する方法について教えて頂きたいのですが。

  • CPANモジュール取得におけるmakeについて

    CPANモジュールのインストールについて質問があります。 環境は Windows XP, ActiveParl5.8.8 ,コンパイラはVC++6.0 です。 ※tar.exeとgzip.exeは C:\Perl\binにあります。 現在、Text::NSPというモジュールをインストールしようとしていますが cpan> install Text::NSP を実行すると makefile (1199):fatal error U1033:予期しない'@echo'Stop. nmake --NOT OK とエラーが出ました。 Microsoftサポートオンラインでエラーを調べたら、nmake仕様が原因らしいのですが、どこをどう変えたら解決できるのかが分かりません。 また、nmake ではなく dmake を使おうと思い、 C:\Perl\bin に dmake.exe を起きました。 また、C:\Perl\lib\CPAN のフォルダにあるConfig.pmのmakeを  'make'= q[] ⇒  'make' =q[C:\Perl\bin\dmake.EXE]と変更しました。 上記の変更で実行すると dmake.exe: Error-- 'C:\Perl\libConfig.pm' not found, and can't be made C:\Perl\bin\dmake.exe -- Not OK とエラーになります。 また perl -V:make でmakeを確認しても常に結果が make ='nmake'; としかなりません。 ここが make ='dmake'; と変えられればインストール出来るのかな?とも考えています。 この変更の仕方が調べているのですが、なかなか分かりません。 よろしくお願いします。 ※現在のnmakeの設定で他のモジュールは何の問題もなくインストール出来ています。

    • ベストアンサー
    • Perl
  • make実行時のエラーについて

    makeについてお尋ねします(先日、お尋ねした件の延長なのですが)。 あるプログラムソース群からの実行ファイルの作成に関する質問です。 以下操作手順です。 ------------ 1. configure.sh というのが用意されていて、中を見てみたら私の計算機のコンパイラの状況などを調べたりして、make.incを出力しています。それは所定の場所に置かれます。これをマニュアルどおり実行しました。 2. その場所(ソース群とかmakefile,make.incがあるフォルダ)でmakeを実行しました。makeはmakefile, make.incを読み込んでいます。make.incがmakefileから呼ばれている記述も確認しました。 makeを実行すると、makefileの以下の部分がおかしいとしてmakeが終了します。 c.o: $(CC) -c $(CFLAGS) $(INCS) $*.c メッセージとして、 cc -c -I hoge.c cc: fetal error: no input files ----------- $(CC),$(CFLAGS),$(INCS) というのはcc, スペース, -I を意味するようですが、これはどこで指定されるのでしょうか。 make.incの中にはそのようなものを指定するところはありませんでした。Fortranコンパイラは調べて調整されていることが分かり、"FC= gfortran -O3" というような記述が見えます。configure.shを使って調査したことが分かります。 また、cc -c -I abc.c は、-Iでインクルードファイルのフルパスを指定なのでしょうか。man ccによるとそういう風です。 $(INCS)を削除すればいいのかもですが、一応、セットとして導入されているものなので、どこで副作用が出るかわからないのでそのままにしているのですが。理屈が分からないので、自発的に編集することをためらっています。 make全般ですが、どういう分野に属するのでしょうか。C言語の1分野でもなく、必ずしもLinuxの習得の中に組み込まれているわけでもないように見えます。学習するシステムとしてどこに属するのかということですが。その場その場でアドホックに調べて習得していくものなのでしょうか。 if......fiというようにフィーリングではわかるのですが、しっかり説明されるような学習の場面がないのですが。

  • Makeについての質問

    こんにちは、Makotoと申します。 AIX上でCの開発を行っているのですが、 各ディレクトリにMakeFileがあり、 コンパイルのたびに各ディレクトリに移動して Makeを行っているのですが、面倒になってきたので、 以下のような簡単なシェルを作成しました。 cd /目的のディレクトリ make depend make clean make 上記と同じ記述が続く.... 始めの内は、規模が小さかったのでよかったのですが、 新しいプログラムが増えるたびに、同じ記述をするのも あまりきれいではないのでMakeFileを検出して Makeを実行させるといったことはできるのでしょうか?

  • GNU make終了時にコマンドを実行できますか?

    GNU make 4.x(4.1か4.2)を使ってMakefileを実行したとき、そのMakefileが成功しても失敗しても、make終了時に何かを実行させる方法は用意されていますか? "make && コマンド"や"make || コマンド"などの複合コマンドのほか、シェルスクリプト内で"make"とコマンドを連続実行するという方法は除きます。あくまでも"make"単体で実行するものとします。 実際そういうことをしたいというのではなく、"make"実行後、Makefile中で生成した一部の中間ファイルが勝手に削除されるという謎の現象が発生しており、その原因を探りたいです。 Makefile中の実行コマンドにわざとエラーを起こすようなコマンドを入れてみても(例えば存在しない"hogehoge"のようなコマンド)、そのエラーが表示された直後に、"rm XXXX YYYY"(XXXXとYYYYはMakefile内部で生成したファイル名)のようなコマンドが表示されて、実際にそのファイルは生成しているはずなのに消えてしまっています。 上記のエラーを起こすコマンドの前に"ls -l ディレクトリ名"を実行するようにして、エラーを起こす直前に中間ファイルが存在することは確認できています。しかしその後、勝手に"rm"が実行されてそのファイルは消されてしまいます。 よろしくお願いします。

  • windowsで使える GNU make

    お世話になっております。 Windowsでの開発とlinuxでの開発をやっております。 前にWindowsのnmake が非力なので linux での make と同じ機能で、cygwinのmake のような特定の環境でしかうごくのではない、make はありませんか? という質問をして、MinGW の make という答えをいただきました。その後、これは便利に使っているのですが、最近共同の作業が多く、他人にも使わせたいのですが、MSYS をインストールしてもらわないとうまく行かないようです。 MinGW の make は単独では msys-1.0.dll が無いと怒るし、msys-1.0.dll を持ってきても、何もしないで終了空いてしまいます。MSYS のインストールディレクトリにパスを通して make をそこから起動すれば問題のですが、MSYSをインストールしないで make を使えるようにする方法はありますか? また、make.exe 単独(または1,2個の.dll)をコピーしてパスの通っている所に置くだけで使える make は無いでしょうか?

専門家に質問してみよう