.c.o: $B$H$$$&%?! hello.c $B$+$i(B hello2.o $B$r:n$k%k! $B$3$l$O8e$G;H$&JQ?t$NDj5A$H;W$C$F$/$@$5$$!%(B, $B0J2(B make$B$H$7$F$O!V(Binstall$B$r:n@.$7$m!W$H2r, (B 別のMakefileからMakefileを呼び出す方法は? Makefileで@:(記号のコロン)はどういう意味ですか? gmakeとmakeの違いは何ですか? Makefileには、複数のルールを含めることができます。 ルールの中にある [ファイル名] のことをターゲットと呼びます。. 私の作業場所で扱う計算機が下記の様に異なりますが、 特に区別せずに作業しています、ご了承ください。 1. Makefileが書けたら、 make program とすれば、さきほどの例は一気にコンパイルされてしまいます。 make でもいいです。実は省略形、 make は先の all: program に書いたものをやれという意味だったから … 記載されたコマンドを表示だけして実行しない.-s: サイレントモード. $B7k6I!$(Binstall$B$H$$$&$b$N$O:n@.$G$-$F$$$J$$$o$1$G$9$,!$(B $B$D$^$j!$$"$k%U%!%$%k$r:n$j$?$$$H$-$K!$(B 英語で作るの意味。 銘柄、ブランドなどの意味であり、主に工業製品に用いられる。多くは製造者名の中核部や創業者の名などに由来するが、厳密には製造者名 (法人名など) とは異なる。 メイクアップの略 … [$B:n$jJ}(B]$B$r=q$-$^$9!%(B 一々 gcc を入力するもの面倒くさいので Makefile を作ろう!! 前回はmakeの簡単な使い方を説明しました。たった1行の設定ファイルを用意すれば、makeコマンドだけでビルドできるようになったわけですが、今回はその仕組みを明らかにしていきます。ただ、本連載の趣旨はソフトウェア開発ではありませんので、Makefileの書き方ということではなく、ビルドに必要なmakeの制御方法という側面から解説します。 さて、まずは前回使用したMakefileをもう一度見てみましょう。 このコロンで区切る書式は、Makefileを書くときに最初に覚えてほしい基礎的なところで … (B 尾藤 a.k.a. おはこんばんちは!! (B test2 $B$O(B hello2.o $B$H(B main2.o $B$+$i:n$i$l$k$h$&$K$7$^$9!%(B, $B%k! ?t$"$j$^$9$,!$(B $B:G8e$K%j%s%/$7$?$[$&$,8zN($,$$$$$G$7$g$&!%(B (B, $B$HJL!9$K%*%V%8%'%/%H%U%!%$%k$r:n@.$7$F!$(B $B$,$"$k!%(B, $B$^$? chmod a+x $@ Makefileのターゲットファイル名:依存ファイルという書式の依存ファイル名を複数指定してみます。 新たにprint.cppというファイルを定義して以下のようなMakefileに書き換えます。 main処理をhello.cppに、mainの中で利用したい関数をprint.cppに記述しています。 $B$=$N:`NA$G$"$k%*%V%8%'%/%H%U%!%$%k!J(Bmain.o $B$H(B sub.o$B!K$,B8:_$7$J$$$+!$(B install$B$r:n@.$9$k$?$a$K$O(B $(PROGRAM)$B$,I,MW$G$"$j(B Stop. $B$^$:$O0J2(B Makefile$B$r8+$F$/$@$5$$!%(B, $B:G=i$K!V!{!a!{!W$H$$$&5-=R$,B? (Bmain.c $B$H(B sub.c$B!K$h$j$bF|IU$,8E$1$l$P(B $B$3$l$r2sHr$9$k$?$a$K$O0J2(B main.c $B$+$i(B main2.o $B$r:n$k%k! (BMakefile$B$K=q$-!$(B cat $< >$@ !$(BC$B8@8l$G$OI,$:(B.c$B$+$i(B.o$B%U%!%$%k$,:n$i$l$k!$$H$$$&$3$H$rMxMQ$7!$(B BTO です。 最近の若い人で Makefile を書く人が増えているそうじゃないですか。 そしたらもう、ウホ、これはオサーンの出番ってなるわけですよ。 僕みたいな老害はこんな場面でしか幅を利かせられないってことで、ええ、やりましたよ make 入門を社内勉強会で。 $B:F5"E*$K%*%V%8%'%/%H%U%!%$%k$,%3%s%Q%$%k$5$l$^$9!%(B 私自身、新卒でMakefileを扱うことになったとき、全くわからずすごく苦労しました。 1つ1つの定義の意味がわからないのもありましたが、「Makefileがなぜ必要で(何が便利で)」というのがわからなず、もやもやしていました。 SRCDIRに存在する拡張子cppのファイル全てをコンパイル対象とすることを意味する。別の拡張子(.cなど)に変更したい場合は、makefile内のcppを全て変更する。 オブジェクトファイルの指定 (OBJECTS) オブジェクトファイルとしてOBJECTSの値を用いる。 $B$=$N:`NA$O$I$l$J$N$+!$$I$&$d$C$F:n$k$N$+$,I,MW$H$J$k$o$1$G!$(B $B(B$B@hF,$K(BTAB$B$rF~$l$?8e!$(B (B $B0EL[(B $B%?%V(B TAB. $B$N8e$K%3%m%s(B(:)$B$r=q$-!$(B 簡単に言うと:= は即時評価 = は遅延評価 です. 具体的に. $B:n$j$?$$$b$N!$$=$N:`NA!$:n$jJ}$,B7$C$F$$$^$9$,!$0UL#$,0c$$$^$9!%(B $B8e, (B[$B:n$j$?$$$b$N(B]$B$r>JN,$7$?>l9g$K$O!$(B make が実行するいかなるコマンドも表示しな … makefileに以下の内容を書いて保存。コマンドラインでmakeと単に打つと、このmakefileが実行対象となる。 hello: hello.c gcc hello.c -o hello. $B0lHV:G=i$K$"$k(B[$B:n$j$?$$$b$N(B]$B$,:n@.$5$l$^$9!%$D$^$j!$(B, $B$H$9$l$P!$(Bmyprogram$B$r:n@.$9$k$3$H$K$J$j!$(B make/makefile$B$O!$Bg$-$$%W%m%0%i%`$N$I$NCGJR$,:F%3%s%Q%$%k$5$l$kI,MW$,$"$k$+$H$$$&;v$H(B,$B$=$l$i$r:F%3%s%Q%$%k$9$kH/9T%3%^%s%I$r(B $B$^$:!$(Bmain.c$B$H(Bsub.c$B$H$$$$D$N%=! (Bmake clean$B$H$7$?$H$-$KITI,MW$J%U%!%$%k$r>C$;$k$h$&$K$7$h$&!%(B, $Id: index.html,v 1.1.1.1 2003/08/13 05:34:24 k-okada Exp $. make clean$B$H$7$F, $B$3$N0EL[$N%k!l9g$b$"$j$^$9!%(B $B!V$[$2!W$H$$$&$b$N$r:n@.$9$k:]$K!$(B (B, $B4X?t$N$J$+$G:G$b6/NO$J$N$,(Bshell$B4X?t$G$"$k!%(Bshell$B%3%^%s%I$r8F$S=P$9$3$H$,$G$-$k!%0J2(Bmakefile$B$G$O(B UNAME = $(shell whoami) $B$O(B whoami $B%3%^%s%I$N7k2L$r(B UNAME $BJQ?t$KBeF~$7$F$$$k!%(B, $B0J2(Bmain.c $B$+$i(B $(UNAME)$B%G%#%l%/%H%j(B $B!J$3$3$G$O(BAdministrator/ $B%G%#%l%/%H%j!K$K(B Administrator/main.o $B$r:n$C$F$$$k!%$3$N$h$&$J(Bmakefile$B$r:n$k$3$H$G!$$R$H$D$N%=!(BOS$BKh$K%3%s%Q%$%k$9$k!$$"$k$$$O%f! !J$1$^$9!%(B, makefile$B$K$OJQ?t$KBeF~$5$l$?J8;zNs$rA`:n$9$k$?$a$N(B$B4X?t(B$B$,MQ0U$5$l$F$$$^$9!%$?$H$($P0J2(Bmakefile$B$G$O!$(B$(patsubst pattern,replacement,text)$B$H$$$&4X?t$rMxMQ$7!$(Btext$B$+$i(Bpattern$B$K0lCW$9$k$b$N$r(Breplacement$B$KCV49$7$F$$$^$9!%(B%$B$O%o%$%k%I%+! (B$B$G$"$k!%%5%U%#%C%/%9$H$O3HD%;R$N$3$H$G$9!%(B $B$H$$$&%k! $B0lHV:G=i$K$"$k(B[$B:n$j$?$$$b$N(B]$B$,:n@.$5$l$k(B $B:n$jJ}$,=q$$$F$"$j$^$;$s!%(B Makefile でよく使う、特別な意味を持つ変数(自動変数)の備忘録です。 具体的には $@, $<, $^, $?, $+, $* と、暗黙ルールで使われる変数($(CXX), $(RM) など)についてです。 $@ ターゲット名。 (B.o$B$H$$$&%U%!%$%k$,I,MW$K$J$l$P!$$3$l$r(B.c$B$+$i$D$/$k(B makefileの中では変数が利用できます.ここではmain.c hello.cからターゲットとなる プログラムをコンパイルし作りますが,変数を使うことでターゲットを作るために新しいソースファイルが必要になった際の手間が省けます. c言語で書いたプログラムをコンパイルする際にMakefileにコンパイル処理をまとめて行くと便利です 。 たまにMakefileをつかってmakeすると以下のエラーが出る時があります。 Makefile:8: *** missing separator. myprogram$B$H$$$&, (B $^ : $B$9$Y$F$N0MB8$9$k%U%!%$%k$NL>A0(B ターゲットをビルドするルールを見つ … (B Makefile all: test calc exec test: test.cpp g++ -c test.cpp calc: calc.hpp calc.cpp g++ -c calc.cpp exec: test.o calc.o g++ test.o calc.o -o exec 新しい表現が出てきましたね。 all:test calc exec ですが、後半はターゲットを連ねています。 つまり、test calc execコマンドを順番に実行するといった内容です。 これがmakefileの基本形になります。このかたまりをルールと呼びます。. (B コマンドラインで make と入力すると, Makefile の内容に従って,コマンドが実行される.; 同じようなツール(構築ツール,配布ツール)に Java では ant,.NETには NAnt がある.; 2.Makefileの文法 $B!J$J$1$l$P:n@.$7$^$9!K!$(B $B$=$N8e$KI,MW$J(B[$B:`NA(B]$B$rJB$Y$^$9!%(B $B$h$&$K$+$-$^$9!%(B, $B$^$?$b$&0lEY(B make test1 $B$H$7$F$b!V%?! $B$3$l$@$H!$0lJ}$N%U%!%$%k$r=$@5$7$?$@$1$G$9$Y$F$N%=! $B$7$?$,$C$F(Btest1 $B$,(B main.c $B$H(B hello.c $B$+$i%3%s%Q%$%k$5$l$k>l9g$O0J2(B @\:n@.$9$k>l9g$O(B, $B$H$7$^$9!%(B (B makefileで、for文を使うなど、コマンドを複数行に分けて記述したいときがあります。その方法と注意点を紹介します。 makefile中で、そのまま複数行のコマンドを書くと、コマンドは行ごとにシェルに渡されてしまうの […] makeはカレントディレクトリにあるMakefile(makefile)という名前をもつファイルをデフォルトのメイクファイルとして認識します.テストを行いたいときなど,他のメイクファイルを使ってmakeを実行したい場合-fオプションを使います. $ make -f foo.mk (Bmakefile$B$K=q$/$Y$-J8;z?t$r8:$i$9$?$a$K(B<$B(B$B$,$"$k!%(B, $@ : $B%?! (B $< $B$r$D$+$C$F$$$k!%(B, makefile$B$NCf$G$OJQ?t$,MxMQ$G$-$^$9!%$3$3$G$O(Bmain.c hello.c$B$+$i%?! この場合は、下記の最後の行の先頭でスペースを使ってい… $B!V(Binstall$B$7$m!W$H$$$&0UL#$G(B make install $B$H, (B $B!V$[$2(B.sh$B!W$H$$$&%7%'%k%9%/%j%W%H$,B8:_$9$k$J$i$P(B, $B$H$7$F:n@.$;$h$H$$$&%k! この内容は以下のようなルールを意味する。 target: prerequisites command. $B$3$l$OHs8zN($G$9!%%3%s%T%e! [$B:n$j$?$$$b$N(B] makefileというファイル名のファイルの中に ソースファイル名や目的のファイル名・その生成方法を記述しておく。 UNIXのインストールによく使われるが、UNIXに限定されているわけでもない。 X68000でも使ってたし。さすがにMSXでは無さそうだけどぉ。 $B4pK\DL$j$K!$:n$j$?$$$b$N!$$=$N:`NA!$:n$jJ}$,=g$K=q$+$l$F$$$^$9!%(B, $B0J2/$7JQB'E*$G$9!%(B 各階層のオブジェクトはMakefile の中で obj-y += hoge.o のようにobj-y変数に追加します。 また、 obj-y += piyo/ のようにディレクトリを追加すると、サブディレクトリに降りるという意味になります。 意味-f makefilename: Makefile の代わりに指定した makefilename を使う.-n: 無実行モード. $B$3$l$r%k!(B$B%5%U%#%C%/%9%k! $+ : Makefile$B$HF1$8=gHV$N0MB8$9$k%U%!%$%k$NL>A0(B 複数ファイルの結合. $B$"$k$$$O$5$i$K$=$N:`NA$N%=! (B $B$3$l$,4pK\E*$J9=B$$G$9!%(B, $B(B $< : $B:G=i$N0MB8$9$k%U%!%$%k$NL>A0(B $B$3$l$O!$(B $* : $B%5%U%#%C%/%9$r=|$$$?%? ターゲットは通常、プログラムによって生成されたファイルの名前です。 $B$=$N(B all$B$N:n$jJ}$O=q$$$F$$$J$$$3$H!$(B のようなMakefile作成時の拡張子.oとは何のファイルという意味なのでしょうか? Makefile作成初心者なのでご教授お願いいたします。 A ベストアンサー Makefileで.PHONYとはどういう意味ですか? this を実行しましたが、複雑すぎます。誰かが私に簡単な言葉でそれを説明できますか? : $B%?! Makefile をみると変数への値の代入で := と = の二種類が使い分けられていることがあります.. makefileの意味や使い方 対訳 メイクファイル解説A file that contains rules that describe how to compile source code or link object modul... - 約1172万語ある英和辞典・和英辞典。発音・イディオムも分かる英 … !A0(B $? つまり、上記のコードはmake clean時には.dファイルを読み込まないという意味です。もしifneq~endifがなかったらどうなるかというと、clean実行前に.dファイルを作りに行ってしまいます。無 … make$B%3%^%s%I$r;H$o$:$K!$%=! $B$^$:!$(BMakefile$B$N4pK\9=B$$r0J2(B (B, (B $B!V%?! $B>pJsM}O@(B(bit$B$NM}O@(B)$B!$(BHTML$B$H%V%i%&%6!$9b5i8@8l$H5!3#8l$J$I!$$R$H$D$N;EMM!JI=8=!K$+$i4D6-$d>u67$K$"$o$;$F, (B $B$=$7$F2?$H$J$/(B all.sh$B$H$$$&%9%/%j%W%H$r=q$$$F$7$^$&$3$H$,B?$$$3$H$+$i!$(B makefileのコマンド行の頭に、@を付ける意味を伺っても宜しいでしょうか?例えば、こんな感じです。clean: @for f in $(TEST_DIR); do( コマンド ); donemakefileの解説書を見たのですが、探し出す事ができませんでした。どうか宜しく $B:n$j$?$$$b$N$r;XDj$;$:$K(B make$B%3%^%s%I$r, (B $BL\E*$O2L$?$7$?$3$H$K$J$j$^$9!%(B, $B/$7JQB'E*$G$9!%(B ここでは、例として記事「複数ファイルのリンク方法 (分割コンパイルとリンク)」で利用したソースコードを使います。例で利用しているのは、conf.cpp, conf.h, log.cpp, log.h, prog1.cpp, prog1.h の 6 ファイルです。 makefile についての説明になりますので、必ずしも上記ファイルでなくとも構いません。もし違う名前のファイルで試す場合は、ファイル名を読み替えてください。 準備はよろしいでしょうか? $B:n$jJ}$O, (B 1.Makefile. $B$3$H$rMxMQ$7$F!$(B makefileでターゲットのリストを取得するにはどうすればよいですか? Makefile-区切り文字がありません. (B, $B$7$+$7!$(Btouch hello.c $B$H$7$F(B hello.c $B$r99?7$9$k$H!$(B, touch$B%3%^%s%I$O(B man touch $B$H$9$k$H(B, $B>e$NNc$G$O(Bhello.c$B$,99?7$5$l$?>l9g$G$b(Bmain.c$B$N%3%s%Q%$%k$,9T$o$l$F$7$^$$$^$9!%(B (B, JSK$B$G$O0J2(Bifeq $B=q<0$d(Bmakedepend $B$J$I$,MxMQ$5$l$F$$$k!%(B, $B$$$+$N$h$&$J(Bclean$B%k! Makefile$B$K$O!$!V(Ball$B!W$rDj5A$7$F$"$k$3$H$,B?$$$3$H!$(B (B $B$R$H$D$N%U%!%$%k$G$5$^$6$^$J%3%^%s%I$r@)8f$9$k(Bmake/makefile$B$r@)$9$k$3$H$O%3%s%T%e! all$B$r:n$j$?$1$l$P!$$^$:(B$(PROGRAM)$B$r:n$l$H$$$&0UL#$7$+$"$j$^$;$s!%(B $B$H$j$"$($:(B make $B$HF~NO$9$l$P, $B$H$J$j$^$9!%$3$N>l9g!$:`NA$,L@5-$5$l$F$$$^$;$s!%(B 以上がmakefileの全てでしたが、こういう風にmakefileを読むと、consoleペインにダーッと表示されるコンパイル経過の表示の意味がわかってきます. C:\eclipse\yagarto-tools-20100703\bin\make all その前に少しコメントの書き方について解説しておきます.Makefileでは,#から行末までがコメントです.例えば, のように使います. また,makeは基本的に行指向です.見やすくするために改行したい場合はバックスラッシュ\を使って改行を無視させることができます.例えば,マクロの定義(後述)で と書けば,makeは改行を無視して次のように解釈します. ここで注意することは,foo.oだけをコメントアウトしたいために と書いてもダメだということです.これは,makeが と解釈してエラーにな… ) こうやってmakefileを記述することは全く意味を成さない、という理由でmakeはエラーメッセージを通知します。 依存関係だけしかないエクストラルール(臨時ルール)を使えば、一度で多くのファイルに大量の臨時の依存関係を与えられます。 $B$=$N4X78$r5-=R$7$?$b$N$,(B Makefile$B$J$o$1$G$9!%(B, (B Makefile$B$r8+$F$$$-$^$7$g$&!%(B Makefile の特殊変数・自動変数の一覧 Oct 9, 2016 on Makefile. $B%3%s%T%e!iD9@-$r$J$/$7$F8zN(2=$9$k9=@.$rDI5Z$9$k$H$$$&$N$,$"$j$^$9!%(B Debian8 bash GNU Make 4.0 2. macOS-X bash GNU Make 3.81 make -p $B$H$9$l$P!$(B, (B ($B%S%k%H%$%s(B): $B%W%m%0%i%`$r%3%s%Q%$%k$7:n$j$^$9$,!$JQ?t$r;H$&$3$H$G%? (B (B, $B;O$^$j$OI,$:%?%V$H$$$&$N$b4pK\$G$9!%(B $B$H$$$&Dj5A$,8+$D$+$j$^$9!%(B $% : $B%?! Makefileは,一見すると複雑に見えますが, ルールを知ってしまえばその構造は実に単純であることがわかります. makeコマンドを使う利点や高度な利用法については 他のドキュメントに任せるとして, ここでは Makefileの基本的な構造を解説します. all.sh$B$H$$$&%9%/%j%W%H$,B8:_$9$k$H0U?^$;$LF0:n$K$J$j$^$9!%(B, make Makefile $B=q$-J}(B $B%k! デフォルトでは、Makeは一番目のターゲットから開始します。このターゲットのことをデフォルトゴールと呼びます。 Makeはカレントディレクトリのmakefileを読み込み、一番初めのルールで処理を開始します。しかし、Makeが完全にこのルールを処理する前に、ルールが依存するファイルのためのルールを処理しなければなりません。各ファイルそれぞれは、自身のルールに従って処理されます。 実はこれは、各ターゲットの再帰的アルゴリズムになっています。 1. $B:n$j$?$$$b$N!J(Ball$B!K$H$=$N:`NA$O(B もし、指定した記号定数が定義されていなければ、これらの擬似命令は意味を持ちません。普通にコンパイルされます。しかし、もし記号定数が定義されていたなら、これらの擬似命令で挟まれた部分はコンパイルされません。 ここではおもに make の使い方 と Makefile の書き方について 説明しています。 じつは make の種類にはいろいろあり、ここでは GNU make (gmake というコマンド名のこともある) を 対象にしています (BSD の pmake でも基本的な部分は同じですが、 マクロ定義などは違うところもあるので注意してくだ …