• ベストアンサー

makeコマンドの意味

make -f unix/Makefile LOCAL_UNZIP="-D_FILE_OFFSET_BITS=64 -DNO_LCHMOD -D_MBCS -DNO_WORKING_ISPRINT" linux_noasm https://gist.github.com/hamano/573753 上記サイトでunzipコマンドのソースにパッチを当ててコンパイルするのに上記のコマンドを実行していました。これは 1. Makefileの中に「$(LOCAL_UNZIP)」という部分があるのですが ここに"-D_FILE_OFFSET_BITS=64 -DNO_LCHMOD -D_MBCS -DNO_WORKING_ISPRINT" という文字列を代入するという意味であってますでしょうか。 また、文字列の中に「-D_MBCS」という記述があり、 パッチファイルの中によく似た「#ifdef _MBCS」という記述があるのですがこのif文を有効にしているという解釈であってますでしょうか。 2. コマンドの最期に'linux_noasm' とあり、Makefileの中を検索したら以下の記述がありました。これはどう解釈すればよいでしょうか。 linux_noasm: unix_make $(MAKE) unzips CC=gcc LD=gcc CFLAGS="-O -Wall"

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

  • ベストアンサー
  • _kappe_
  • ベストアンサー率68% (1522/2216)
回答No.1

1.合っています。この場合、-D_MBCSは「_MBCSというシンボルをdefineする」という意味になります。 2.「linux_noasmというターゲットをビルドするには、前提としてunix_makeというターゲットをビルドしておく必要があり、その後にターゲットunzipsをmakeする」という指示です。unzipsをmakeする際に使う変数CC、LD、CFLAGSの内容も指定しています。 ターゲットunzipsは下記のように定義されています。変数UNZIPSに含まれるターゲットが前提だと分かります。 unzips: $(UNZIPS) 変数UNZIPSの定義は UNZIPS = unzip$E funzip$E unzipsfx$E で、変数Eは空っぽなので、「ターゲットunzipsをmakeするには、unzip, funzip, unzipsfxという3つのターゲットをmakeする必要がある」という意味になります。CC、LD、CFLAGSの指定内容は、unzip, funzip, unzipsfxをmakeする際にも引き継がれます。

unko347
質問者

お礼

詳細にご説明いただきありがとうございました。

Powered by GRATICA

関連するQ&A

  • Cygwinでmakeコマンドが使えない(Vista)

    今までFedora-Linuxで使っていたプログラムをWindows上で実行するために、VistaにCygwinをインストールし、使い始めていることろです。 Makefileを使いコンパイルをするため [make]や[make -f Makefile]などをコンソールに入力しても、 bash: make: command not found が出てしまいます・・・。これを解決したいのです。 これは、Linux上でいつも行っていた操作と全く同じです。 Cygwin用にMakefileを書き換える必要がある、何かのツールをインストールする必要がある、makeに代わる何かのコマンドが存在する・・・ など、あるのでしょうか?

  • Cygwinで、makeコマンドが使えない(Vista)

    今までFedora-Linuxで使っていたプログラムをWindows上で実行するために、VistaにCygwinをインストールし、使い始めていることろです。 Makefileを使いコンパイルをするため [make]や[make -f Makefile]などをコンソールに入力しても、 bash: make: command not found が出てしまいます・・・。これを解決したいのです。 これは、Linux上でいつも行っていた操作と全く同じです。 Cygwin用にMakefileを書き換える必要がある、何かのツールをインストールする必要がある、makeに代わる何かのコマンドが存在する・・・ など、あるのでしょうか?

  • DBI Make error

    はじめまして。 Solaris 10 環境で DBI を使用したいのですが、make が上手くできません。 # perl Makefile.PL cc=gcc (中略) Writing Makefile for DBI # make gcc -c -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -D_TS_ERRNO -xO3 -xspace -xildoff -DVERSION=\"1.52\" -DXS_VERSI ON=\"1.52\" -KPIC "-I/usr/perl5/5.8.4/lib/i86pc-solaris-64int/CORE" -DDBI_NO_THREADS Perl.c gcc: unrecognized option `-KPIC' gcc: language ildoff not recognized gcc: Perl.c: linker input file unused because linking not done /usr/bin/perl /usr/perl5/5.8.4/lib/ExtUtils/xsubpp -typemap /usr/perl5/5.8.4/lib/ExtUtils/typemap -typemap typemap DBI .xs > DBI.xsc && mv DBI.xsc DBI.c gcc -c -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -D_TS_ERRNO -xO3 -xspace -xildoff -DVERSION=\"1.52\" -DXS_VERSI ON=\"1.52\" -KPIC "-I/usr/perl5/5.8.4/lib/i86pc-solaris-64int/CORE" -DDBI_NO_THREADS DBI.c gcc: unrecognized option `-KPIC' gcc: language ildoff not recognized gcc: DBI.c: linker input file unused because linking not done Running Mkbootstrap for DBI () chmod 644 DBI.bs rm -f blib/arch/auto/DBI/DBI.so LD_RUN_PATH="" cc -G DBI.o -o blib/arch/auto/DBI/DBI.so sh: cc: 見つかりません。 *** Error code 1 make: Fatal error: Command failed for target `blib/arch/auto/DBI/DBI.so' perl Makefile.PL で、cc=gcc と指定しているのに、 make で "sh: cc: 見つかりません。" と言われてしまい ました。 どのように指定すればよろしいのでしょうか? ご存知の方がいらっしゃったら、よろしくお願いします。

    • ベストアンサー
    • Perl
  • 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を利用する手順を教えて頂きたいと思います。よろしくお願いします。

  • 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ということですが。 よろしくお願いします。

  • コマンドプロンプトでコマンドが認識されない

    c初心者なのですが、コマンドプロンプトでコマンドがうまく実行できません。 インストールしたものは、MinGWとmsysです。 環境変数もあまりよくわかっていませんが一応設定しました。 http://www.knatech.info/Dev-mingw-install.html こちらの環境変数の設定を参考に設定しました。 そしてコマンドプロンプトでmakeをうつと make: *** No targets specified and no makefile found. Stop. となり、こちらは認識しているようですが、gccと打つと 'gcc' は、内部コマンドまたは外部コマンド、 操作可能なプログラムまたはバッチ ファイルとして認識されていません。 とでてしまいます。 どのようにしたらgccを認識してくれるのでしょうか。 初めてなことだらけで、質問も分かりにくいところがあるかもしれませんがよろしくお願いします。

  • DRAC makeエラー

    POP before SMTPを導入しようと思い、DRACをダウンロードしMakefileを編集しmakeをやったところ以下のようなエラーが出ます。 ================================ gcc -DSOCK_RPC -DFCNTL_LOCK -DGETHOST -DDASH_C -g -c -o testing.o testing.c make: gcc: コマンドが見つかりませんでした make: *** [testing.o] エラー 127 ================================ 環境は、CentOS4 Sendmail-8.13.1-2です。 gccはyumよりgcc.i386 3.4.3-9.EL4 update致しました サイトを色々検索しましたが、ヒントになるような所を見つけることが出来ませんでした。 よい、解決法があればご教授頂けないでしょうか? 宜しくお願い致します。

  • makeでcshのコマンド展開を使用したい

    makeの中で例えば /bin/rm -f AAA*.{s,loc} のようなコマンド展開を記述した所、 solaris版 のgnu makeではこれが認識されず、一方linux版のgnu makeでは認識されるという現象が出ております。 [SOLARIS] AAA*.s AAA*.loc共に削除されない [LINUX] AAA*.s AAA*.loc共に削除される 特にエラーメッセージも出ないので原因が分かりませんが、 make "{s,loc}"という記法はcshのものなので、makeから呼ばれるshellに原因があるのでは無いかと想像していますがどうなのでしょうか? もしshellに起因する問題である場合、makeの中で用いられる展開をcshに行わせる為の指定方法としてどのようなものがあるのでしょうか? 以上宜しくお願い致します。

  • makeがエラーを吐く

    makeがエラーを吐く 今、Fedora13で無線LANのドライバ(RT2870)をインストールしているのですが・・・ makeを行うと下記のような表示で止まってしまいます # make make -C tools make[1]: ディレクトリ `/home/makoto/rt2870/tools' に入ります gcc -g bin2h.c -o bin2h make[1]: ディレクトリ `/home/makoto/rt2870/tools' から出ます /home/makoto/rt2870/tools/bin2h cp -f os/linux/Makefile.6 /home/makoto/rt2870/os/linux/Makefile make -C /lib/modules/2.6.33.3-85.fc13.i686/build SUBDIRS=/home/makoto/rt2870/os/linux modules make: *** /lib/modules/2.6.33.3-85.fc13.i686/build: そのようなファイルやディレクトリはありません. 中止. make: *** [LINUX] エラー 2 一応、カーネルソースなども一通りインストールしましたが、やはり上記のような状態です。 そこで、エラーを吐く/lib/modules/2.6.33.3-85.fc13.i686/buildへ行って見たところ、「このリンクはリンク切れです」と出ました。 そこで質問なのですが、このリンク切れを直したいのですが、どこにたどればいいのでしょうか。 よろしくお願いします。

  • make debug で DEBUGをtrue にするには

    $ make debug する時だけ  自己定義したDEBUG変数"$(DEBUG)"をtrue にするには Makefile でどのように記述したらよいのでしょう? 比較的大規模なソースのmake を debugで行いたいのですが、 all と違ってサブのMakefileが中途半端に作られているため、 debugのライブラリが読み込めません。 (パス設定自体が、debug用にはされていないものが一部存在) 大規模なプロジェクト群のMakefileを私ではすべて書き換え切れないため、 変数DEBUGを定義してピンポイントで追加パス(debug用)を 自分で書き込みたいのですが (release と debugで、サブのライブラリがコピーされる ディレクトリが異なり、メインに近いプロジェクトのメイクファイル では、リリース用のパス記述群しかないため) DEBUG= ... debug:: <TAB>DEBUG=true のようにしたいのですが、 (make debugの時だけ、DEBUG=trueにしたいのです) 上記の条件分岐?を Makefileで記述するには どうしたらよいのでしょう? (コマンド記述で変数に代入できないようですし...)

専門家に質問してみよう