- ベストアンサー
makefileの#の説明
- makefileの#記号について説明します。
- makefileでの#記号は、コマンドのテキスト内でのコメントを導入しません。
- #以降の文字はシェルに渡され、その処理方法はシェルに依存します。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
その前にある文章で 「#以降がコメントとなり、無視される」 と書かれています。 その文章以降は、その例外事項です。 Makefile が、「make自身の動作等を設定する部分」と「実行するコマンドを記述する部分」から構成されているのは、ご存知かと思います。 このうち、 コマンドを記述する箇所では(in the text of commands)、 # は、makeコマンドのコメント(a `make' comment)にはならない(does not introduce )、と書いてあります。 ※ 原文では、 a make comment のmakeは書体が変えてあります。 英語のmake ではなく、 make コマンド だ、という意味です。 例えば #OBJ=aaa.o all: bbb.o some_command # some comment とあったなら、 #OBJ=aaa.o は、make自身の動作等を設定する部分」であり、#以降がコメントと解釈され、無視されます。 対し、 some_command # some comment は、「in the text of commands」 なので、#以降もそのままシェルに渡されます。 つまり、シェルは 「some_command # some comment」 というコマンド列を実行します。 #以降をコメントとして無視した 「some_command 」 では無い、ということです。 ただし、その渡された側のシェルが、# をコメントとして解釈し「some_command 」として実行するかもしれません。 #をコメントとして解釈しないシェルなら「some_command # some comment」です。 コメントが_のシェルなら、実行されるのは「some」です。 これが「シュルに依存」の意味です。
その他の回答 (2)
- notnot
- ベストアンサー率47% (4900/10358)
>「コメントを始める」の意味がよくわかりませんでした。 「コメントを始める」=「以降がコメントとなる」 >#以降がコメントとなるので、むしろ「コメントを始める」のではないでしょうか。 いいえ。 別に # 以降がmakefileのコメントになるわけでは無いというのがその文の記述です。 #以降を取り除くこと無く、行全体がシェルに渡されます。 SHELL=/bin/echo all: <tab>aaaa bbbb #cccc ddddd というMakefileを試してみれば意味がわかります。
お礼
再度の回答ありがとうございます。 #以降はmakefile自身はコメントとは判断せず、shellにそのまま渡すということなのですね。 サンプルコードも掲示いただき、理解が深まりました。 ありがとうございました。
- notnot
- ベストアンサー率47% (4900/10358)
同じ内容を説明し直してるだけでしょうね。 コマンドテキストの中では、#はmakeのコメントを始めない ということ。
補足
回答ありがとうございます。 > コマンドテキストの中では、#はmakeのコメントを始めない 「コメントを始める」の意味がよくわかりませんでした。 #以降がコメントとなるので、むしろ「コメントを始める」のではないでしょうか。
お礼
詳細な回答ありがとうございます。 「in the text of commands」の意味が分かりました。これにて、色々な文の理解がしやすくなりました。 make自身は#以降をコメントとするのでなく、shellに渡し、shell側ではコメントかどうか判断するということが、お二人の回答をいただきよく理解できました。 ありがとうございました。