make

1名無しさん@お腹いっぱい。NGNG
UNIX の基本 make
GNU make, BSD make, imake, nmake, etc.

164名無しさん@お腹いっぱい。2012/07/17(火) 23:14:09.47
build/foo.a: build/foo.o
ar rcs $@ build/foo.o
build/foo.o:
[ -d build ] || mkdir build
touch build/foo.o

165名無しさん@お腹いっぱい。2012/07/18(水) 00:44:42.87
buildのタイムスタンプが更新しないようにするというよりも、buildのタイムスタンプに依存しないようにするほうがいいんじゃないかな

http://www.gnu.org/software/make/manual/html_node/Prerequisite-Types.html
によると下から2行目を
build/foo.o: | build
でできそう

166名無しさん@お腹いっぱい。2012/07/21(土) 14:05:12.64
ありがとうございました。|を使うことで解決しました。

167名無しさん@お腹いっぱい。2012/08/16(木) 04:15:16.18
今年は大垣でmakeするの?

168名無しさん@お腹いっぱい。2012/10/29(月) 21:57:03.15
Makefileの中に使われる
:= はどういった意味でしょうか
+=は変数に右辺を追加する意味かと思うんだけど

169名無しさん@お腹いっぱい。2012/10/30(火) 19:35:28.31
>>168
man make

とレスしようと思ったが、環境によって書かれていないこともあるみたいなので、
勝手に FreeBSD の make の場合に限定させてもらうけど、以下 URL の変数代入の項目に記載がある。
http://www.jp.freebsd.org/cgi/mroff.cgi?subdir=man&lc=1&cmd=&man=make&dir=jpman-9.0.2%2Fman§=0

GNU make の場合は、info make に記載があるっぽい。
http://quruli.ivory.ne.jp/document/make_3.79.1/make-jp_5.html#Setting
http://quruli.ivory.ne.jp/document/make_3.79.1/make-jp_5.html#Flavors

170名無しさん@お腹いっぱい。2012/10/30(火) 21:35:09.63
レス書いたけど、マルチだったのでやめた。

171名無しさん@お腹いっぱい。2012/11/19(月) 16:40:52.08
Makefileで処理を自動化できないかと思い、makeについて勉強しております。
以下のことを行いたいのですが、色々と検索して調べているのですが実現できずにいます。もしよろしければ、サンプルを書いていただけないでしょうか?

行いたいことは、
make testと言うコマンドでテストを一括で行いたいと考えております。
テストは単純で、テストファイルを用意しているので、"perl test.pl"になります。
make testはファイルの更新に依存せずに実行させる。

まず、Makefileのディレクトリ配下の"test.pl"を検索してtest.plの一覧を受け取る方法がわからずに悩んでおります。
また、そのリストを順番に、実行しているファイル名を出力しつつ回したいと思っているのですが、その方法がわかりません。

今は下のように考えたのですが、間違っているようで思ったとおりに動きません。

TEST_FILES = `find ./ -name "test.pl"`

all:
echo all

.PHONY: test
test:
$(foreach filename, $(TEST_FILES), $( echo $(filename)))

172名無しさん@お腹いっぱい。2012/11/19(月) 19:01:43.87
GNU makeは人間が書くためのツールじゃないと思う。

test:
find . -name test.pl -exec sh -cx "perl {}" \;

173名無しさん@お腹いっぱい。2013/02/08(金) 14:12:54.85
make の ワイルドカード( * ) の使い道について教えていただけませんか。

パターンの、% を使えば同じことができるように思いますし、
そもそも、ワイルドカードは、すでにファイル(オブジェクト)として存在するものにしかマッチしないようなので、
ファイル(オブジェクト)を新規作成しないで、アップデートするためにしかルールを使いたくないという
特殊な場合でしか、意味がないような気がします。。

自分でも、自分の理解が変なような気がするのですが、
どなたか教えてください。
よろしくお願いします。

174名無しさん@お腹いっぱい。2013/04/20(土) 01:31:47.01
教えて下さい。
下記のように引数 10 を Makefile 内で、更に引数として渡してやりたいのですが
どの様にすればよいのでしょうか?

$ make hoge 10

にて

hoge:
  /PATH/TO/foo.sh 10

と渡るようにしたい。


Makefile 内にて

ARG = $(shell read -p "ARG = " arg; echo $(arg))

hoge:
  /PATH/TO/foo.sh $(ARG)

などしてみたのですが上手くできませんでした。

175名無しさん@お腹いっぱい。2013/04/20(土) 05:46:30.94
無理。というかmakeの使い方間違ってる。

176名無しさん@お腹いっぱい。2013/04/20(土) 07:33:37.61
>>175
ありがとうございます。
ご指摘がヒントになり、解決できました。
shell スクリプト内で read することで対応できました。

ARG=`read -p "ARG= " arg; echo $arg`

echo $ARG

↑こんな感じで。

177名無しさん@お腹いっぱい。2013/08/01(木) NY:AN:NY.AN
めでたしめでたし

178名無しさん@お腹いっぱい。2013/08/01(木) NY:AN:NY.AN
BSD makeとGNU make比較した時
クライアング運用ならBSD makeのが劣っている点はなんですか?

179名無しさん@お腹いっぱい。2013/10/05(土) 08:31:25.07
質問です。

Makefileに、

HOGE = -opta

と書かれていて、これは修正しないものとします。
make時に臨時に HOGEに -optb を追加したいのですが、

$ make HOGE+=-optb

を実行すると HOGE = -optbの状態で上書きされ、Makefileの-optaが消えてしまいます。
( += の指定は環境変数HOGEに追加するという意味にしかなりません。)

これを、Makefileの記述も生かしつつ、それに追加ということを
makeのコマンドラインで指定することはできませんか?

もちろん、Makefileの下の行に HOGE+=-optb と追記すればOKですが、
最初に書いたようにMakefileを修正しないということが条件です。

以上、わかる方回答をお願いします。

180名無しさん@お腹いっぱい。2013/10/05(土) 09:20:10.39
>>179
一時的でよいのであればそのように指定すればよいのではないでしょうか?
$ make HOGE="-opta -optb"

181名無しさん@お腹いっぱい。2013/10/05(土) 09:29:26.75
>>180
それじゃ解決になりません。

>>179 は例として書いただけで、
実際には HOGE = -opta の部分はもっと複雑で
例えば HOGE = $(FUGA) -Oopt $(BOKE)
みたいに他の変数も参照したりしていて、何に展開されるか自明じゃないです。

そういうのに関係なく、最後に -optb の追加だけやりたいというのを
コマンドラインの make HOGE=... のような書き方で簡単にやりたいという質問です。

では、わかる方(他の方)回答をお願いします。

182名無しさん@お腹いっぱい。2013/10/05(土) 11:14:39.83
>>181
他の方でなくて申し訳ないのですが、、、
もしHOGEが一度定義された後、変わらないのであればMakefileを一時的に以下のように変更して、
中身を取り出してはどうでしょうか。

HOGE = $(FUGA) -Oopt $(BOKE)
echo $(HOGE)
exit

そこで出てきたHOGEをmake HOGE=で指定する方法はどうでしょう。

ちなみに>>179でOKだとされたことが
echo "HOGE+=-optb" >> Makefile; make
であれば、最後にHOGEの内容を変えたあと、HOGEは参照されることはないと思われます。

183名無しさん@お腹いっぱい。2013/10/05(土) 11:24:15.53
>>182
すみませんが、全然解決になってません。
Makefileの変更は不可です。

あと、>>182の下3行は182さんの間違いです。

Makefileでは、変数の展開だけ先にやって、
その後でルールを実行するので、
Makefileの最終行に変数代入追加を行なっても
それより上の行に書いてあるコマンドでちゃんと参照されます。

すみませんが、そのようなことは理解ずみの方のみ回答をお願いします。

ではどうぞ

184名無しさん@お腹いっぱい。2013/10/05(土) 11:52:38.36
>>183
勉強になります。

そうであれば、
$ make -p | grep HOGE
で出てきた、値に何か追加して
$ make HOGE="..."
でどうでしょう。

185名無しさん@お腹いっぱい。2013/10/05(土) 12:05:26.20
いや、だからそんなのじゃダメだって。

186名無しさん@お腹いっぱい。2013/10/05(土) 23:46:35.99
っていうか、make の仕様をくつがえすようなことはできないよ。

187名無しさん@お腹いっぱい。2013/10/06(日) 06:44:29.75
ソース書きなよ。

188名無しさん@お腹いっぱい。2013/10/06(日) 06:55:22.69
>>179
(cat Makefile; echo HOGE+=-optb) | make -f -

189名無しさん@お腹いっぱい。2013/10/06(日) 07:04:12.29
>>188
それでも、Makefileの中から $(MAKE) で自分を再帰呼出ししていたら
-f の指定が無意味になるのでNGだよ。残念。

190名無しさん@お腹いっぱい。2013/10/06(日) 15:36:26.82
make を使うのが間違ってるんじゃ

191名無しさん@お腹いっぱい。2013/10/07(月) 21:09:25.32
pmake専用
make HOGE="`make -V HOGE` -optb"

192名無しさん@お腹いっぱい。2013/10/08(火) 07:33:24.10
CMake 凄すぎワロタwwwwwww
バカなドザの俺でも MinGW で sox を make 出来たwwwwwwww
このアイちゃんツールスゲェwwwwwwww

193名無しさん@お腹いっぱい。2013/10/19(土) 11:50:38.99
make loveと入力しても
loveをmakeするルールがないと言われました
照れているのですか?

194名無しさん@お腹いっぱい。2013/10/20(日) 21:18:36.55
GNU Make 4.0

Guile が組込まれただと?!

195名無しさん@お腹いっぱい。2013/10/20(日) 22:20:22.89
これで一層移植性が悪くなるのか。なんか逆の方向に必死で走ってる。

196名無しさん@お腹いっぱい。2013/11/23(土) 02:30:05.46
ぼく用メモ
必須項目をfindで列挙するとき-print0オプションをつけると仇となることがある

197名無しさん@お腹いっぱい。2014/06/04(水) 00:53:10.80
Makefile で、
%.o : %.cpp
(rule)
と汎用的に書いておき、特定のソースコードはコンパイルオプションを変えてコンパイルしたい
場合、どう書けば良いですか? 上記に続けて
a.o : a.cpp
(rule)
と書いても無視されてしまう…
makefileを分割しないとダメなんですかね?

198名無しさん@お腹いっぱい。2014/06/20(金) 22:21:58.32
順序を逆にすれば?

199名無しさん@お腹いっぱい。2014/10/19(日) 13:11:51.98
export PATH=/usr/new/bin:/usr/localbin:$PATH
としているのですが、
makeすると /usr/local/binにある方が使われてしまいます。
makeで使われるシェルにPATHを設定するためには、どこにその記述をすればよいのでしょうか。

自分でMakefileを作ったわけではなく
具体的には、gccのmake中のものなんですが。

200名無しさん@お腹いっぱい。2014/10/19(日) 13:36:31.37
Makefileの中で再設定されてるんだろ。
gccだったらconfigureとか黒魔術がかかってるから、素人は手出しできない。

PATH=/usr/new/bin:/usr/local/bin:$PATH ./configure hoge
で、うまくいくかも。

201名無しさん@お腹いっぱい。2014/10/19(日) 14:09:36.84
Makefileの中でPATHかコマンドを変えてるんじゃない?
Configuerで変更できないの?

202名無しさん@お腹いっぱい。2014/10/20(月) 13:12:31.29
>>199
MakefileでSHELL変数を設定すればいい
http://www.gnu.org/software/make/manual/make.html#Choosing-the-Shell

でもgccのビルドだとMakefileが複数あるんだっけ
自分なら、面倒そうたら一時的に/usr/local/bin/sh をリネームするかなあ

203名無しさん@お腹いっぱい。2014/10/20(月) 18:00:01.09
実際の問題はconfigureが/usr/new/binからコマンドを拾ってくれないという方だったりしませんか?
/usr/new/binにある方を使わせたいコマンドとは何でしょう?

204名無しさん@お腹いっぱい。2015/05/20(水) 16:26:17.72
+=の利点について教えてください。
HOGE+=123
は、
HOGE:=${HOGE} 123
とも記述できますよね?なら+=の必要性はあるのでしょうか?

205名無しさん@お腹いっぱい。2015/05/20(水) 18:59:31.89
挿入ネタはいいです

206名無しさん@お腹いっぱい。2015/12/10(木) 01:01:57.05
ハゲ侍 サブコミュ イケメン スカイプ マリリンマンソン Twitter マリオ64 ゲーム実況者 マリオカート
ハゲ侍 ツイッター 星のカービィ64 マリオサンシャイン ニコニコ超会議 ポケモン フレコ MH4G アメブロ
ハゲ侍 アメーバブログ 仕事 Skype ツイキャス モンハン 歌い手 スプラトゥーン マニアック
ハゲ侍 動画 顔 ドリームクラブ 好き 刃牙 サイレントヒル ドラゴンボール イケボ
ハゲ侍 漫画 フレンドコード NG縛り ニコニコ生放送 歌ってみた 太刀 ニコニコ超パーティー コミュニティ
ハゲ侍 大学 アキネーター 配信 ニコ生 サブコミュ マリリンマンソン イケメン 学歴
ハゲ侍 マリオカート Twitter スカイプ マリオ64 ツイッター ゲーム実況者 星のカービィ64 ニコニコ超会議
ハゲ侍 ポケモン マリオサンシャイン フレコ MH4G アメーバブログ 仕事 Skype ツイキャス
ハゲ侍 モンハン 歌い手 マニアック 動画 アメブロ スプラトゥーン 刃牙 ドリームクラブ
ハゲ侍 好き サイレントヒル ドラゴンボール 漫画 顔 NG縛り フレンドコード ニコニコ生放送
http://kanae.2ch.net/test/read.cgi/pcqa/1421101110/51
http://kanae.2ch.net/test/read.cgi/pcqa/1415921104/55
http://kanae.2ch.net/test/read.cgi/pcqa/1436852775/17

207名無しさん@お腹いっぱい。2016/01/09(土) 15:00:29.30
何年か使わないうちにすっかりボケてしまった
$(NAME) と ${NAME} って何が違うか分かる方教えてください。

208名無しさん@お腹いっぱい。2016/01/09(土) 17:47:40.91
http://www.jp.freebsd.org/cgi/mroff.cgi?subdir=man&lc=1&cmd=&man=make&dir=jpman-11.0.2%2Fman&sect=0
変数は、中括弧 (`{}') または括弧 (`()') のいずれかで変数名で囲み、
ドル記号 (`$') を前に付けることによって展開されます。
変数名が単一の文字である場合のみ、中括弧または括弧を囲むことは、必要ではありません。
この短い形式は、推奨されません。


http://quruli.ivory.ne.jp/document/make_3.79.1/make-jp_5.html
変数の値を代用するには、括弧または中括弧のなかにドル記号に続いて変数名を書きます。
たとえば、‘$(foo)’や‘${foo}’は変数fooの正しい 参照例です。
また、‘$’の特別な点は、ファイル名やコマンドにおいて1個の ドル記号を表わす際は、
‘$$’と記述しなければならないことです。

209名無しさん@お腹いっぱい。2016/01/10(日) 20:03:53.20
(`・ω・´) Makefile で一時ファイル作るよ!

$ cat Makefile
TEMPFILENAME=$(shell tempfile)

all :
echo HELLO > $(TEMPFILENAME)
cat $(TEMPFILENAME)
$

(`・ω・´) これでいけるはず・・・とぉ!

$ make all
echo HELLO > /tmp/fileYaEkVA
cat /tmp/filehyaCJB
$

(´・ω・`)

210名無しさん@お腹いっぱい。2016/01/13(水) 22:02:47.92
>>209
simply expanded variableにすりゃええ

TEMPFILENAME := $(shell tempfile)

211名無しさん@お腹いっぱい。2016/01/26(火) 19:33:16.40
>>210
ありがとう、僕の求めていた答えはまさにこれだ。
(`・ω・´)b

212名無しさん@お腹いっぱい。2016/03/25(金) 19:19:29.27
makefileの書き方が分からない。(1/2)
Windows7でmingwのgccを使っています。
win32apiを使っての開発の件でリソーススクリプ
トが有る場合と無い場合とではmakefileの中身が
違います。
リソーススクリプトが有る場合のmakefileは、下記です。
SRC=01.c
OBJS=$(SRC:.c=.o)
RC=02.rc
OBJS+=$(RC:.rc=.o)
PROG=01.exe
CC=gcc
MENU=windres
CFLAGS=-Wall -O3 -finput-charset=cp932 --exec-charset=cp932
LDFLAGS=-mwindows
RM=rm
%.o: %.c
$(CC) $(CFLAGS) -o $@ -c $<
%.o: %.rc
$(MENU) $(RC) $*.o
.PHONY : all
all: $(PROG)
$(PROG): $(OBJS)
$(CC) $(OBJS) $(LDFLAGS) -o $@
.PHONY : clean
clean:
$(RM) $(OBJS)

213名無しさん@お腹いっぱい。2016/03/25(金) 19:20:15.49
makefileの書き方が分からない。(2/2)

リソーススクリプトが無い場合のmakefileは、下
記です。
SRC=01.c
OBJS=$(SRC:.c=.o)
PROG=01.exe
CC=gcc
CFLAGS=-Wall -O3
#LDFLAGS=-mwindows
RM=rm
%.o: %.c
$(CC) $(CFLAGS) -o $@ -c $<
.PHONY : all
all: $(PROG)
$(PROG): $(OBJS)
$(CC) $(OBJS) $(LDFLAGS) -o $@
.PHONY : clean
clean:
$(RM) $(OBJS)

上記二つのmakefilleをif文を用いて一つの
makefileに統一をしたいのですが。if文の書き方
が分かりません。

済みません。makefileの提示をお願いします。
宜しく、お願いします。

214名無しさん@お腹いっぱい。2017/12/29(金) 10:16:11.43
誰でも簡単にパソコン1台で稼げる方法など
参考までに、
⇒ 『宮本のゴウリエセレレ』 というブログで見ることができるらしいです。

グーグル検索⇒『宮本のゴウリエセレレ』

J1PNYU9X0F

新着レスの表示
レスを投稿する