• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:makeの変数設定の優先度)

makeの変数設定の優先度

このQ&Aのポイント
  • C++クックブックの日本語版でのmakefileの変数の優先度について調査
  • p62の説明と実際の動作にずれがある
  • コマンドラインで指定した値が優先される可能性がある

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

  • ベストアンサー
  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.1

英語版の C++ クックブックは持っていないので「日本語化の過程で間違いが入った」かどうかはわかりませんが, Make の動作としては コマンドラインで指定したものが優先 です. ただし「コマンドラインで指定しようとどうしようと Makefile に書いてあるようにしたい」ということであれば, それなりに可能です.

flex1101
質問者

お礼

回答ありがとうございます。 やはりコマンドライン指定が優先されるのですね。 > 「コマンドラインで指定しようとどうしようと Makefile に書いてあるようにしたい」ということであれば, それなりに可能です. こういうこともできるのですね。 もう少しmake関連の資料を読み進めていきます。 ありがとうございました。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • makeというコマンドに関する質問

    おちゅーしゃという2chブラウザをturboLinuxにインストールしようと思うのですが、Makeするところがわかりません。 makeというコマンド事は調べたのですが、「make」とだけ打って実行すれば、makeできると書いてあったのでochusha-0.5.8.2というディレクトリに移動して実行してみた所 make: *** ターゲットが指定されておらず、makefile も見つかりません。中止。 と表示されました。 他にも色々な事をやってみましたがどれも失敗でした 誰かMakeのやり方をしっている人が居たら教えてください

  • 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が汚くなる。

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

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

  • modsslのmakeができません。

    Linux8.0サーバにApacheを導入、Apacheとopen_sslとmodsslをサーバで展開後、コンパイルしようと思ってopensslのmakeは終了。mod_sslを\'make\' したら、エラーになりました。 DIRの中身を確認したら「makefile」が見当たらずmakeできません。 エラーは以下のとおり。 『make: *** ターゲットが指定されておらず、makefile が見つかりません. 中止。』 これ、どうしたらいいんでしょうか?

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

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

  • pingが通らない

    コマンドラインであるサーバーのIPアドレスを指定して ping xxx.xxx.xxx.xxx と実行すると「要求がタイムアウトしました。」と出ます。 しかし、mysqlのコマンドで mysql -u root -h xxx.xxx.xxx.xxx -p とコマンドを打つとmysqlにログインすることができます。 pingでは応答がないIPアドレスなのにmysqlコマンドでIPを指定してログインできると いうのはどういうことなのでしょうか。

  • makeコマンドについて

    こんにちは、 CentOS4.0に、Snortをインストールしようと思い、下記のように 解凍し、インストールを行ったのですが、 $ tar -zxvf snort-2.6.0.tar.gz $ cd snort-2.6.0 $ ./configure $ make # make install $ ./configure までは上手くいったのですが、 $ make のコマンドを実行したとき、 make: *** ターゲットが指定されておらず、makefile も見つかりません。中止。 のメッセージが表示され、上手くインストールできません。 実は恥ずかしながら、makeコマンドを使用してソフトをインストールする時は いつもこのメッセージが表示され、上手くセットアップ出来たことがありません。 原因として何が考えられるでしょうか? どなたかご存知の方がいらっしゃいましたらアドバイスよろしく お願いいたします。

  • 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というようにフィーリングではわかるのですが、しっかり説明されるような学習の場面がないのですが。

  • CSSのユニバーサルセレクタと継承・優先度について

    ユニバーサルセレクタの優先度は最下位だと思うのですが 以下の場合でline-heightがユニバーサルセレクタの方を優先してしまうのは何故でしょうか? <div id="main"> <p></p> </div> *[ line-height: 1.0; ] #main[ line-height: 1.5; ] ユニバーサルセレクタのline-heightがPに設定されるのは理解出来ますが そこからそのPを包み込んだDIVのIDセレクタの設定が継承されないのは何故でしょうか? 以下のようにIDセレクタから子孫設定をするとようやく優先されます。 *[ line-height: 1.0; ] #main p[ line-height: 1.5; ] ユニバーサルセレクタには自分で設定したIDやクラス そしてそのIDやクラスの子孫設定も含まれるのでしょうか?