0001名無しさん@お腹いっぱい。NGNG
UNIX の基本 make
GNU make, BSD make, imake, nmake, etc.
0171名無しさん@お腹いっぱい。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)))
GNU makeは人間が書くためのツールじゃないと思う。
test:
find . -name test.pl -exec sh -cx "perl {}" \;
0173名無しさん@お腹いっぱい。2013/02/08(金) 14:12:54.85
make の ワイルドカード( * ) の使い道について教えていただけませんか。
パターンの、% を使えば同じことができるように思いますし、
そもそも、ワイルドカードは、すでにファイル(オブジェクト)として存在するものにしかマッチしないようなので、
ファイル(オブジェクト)を新規作成しないで、アップデートするためにしかルールを使いたくないという
特殊な場合でしか、意味がないような気がします。。
自分でも、自分の理解が変なような気がするのですが、
どなたか教えてください。
よろしくお願いします。
0174名無しさん@お腹いっぱい。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
ありがとうございます。
ご指摘がヒントになり、解決できました。
shell スクリプト内で read することで対応できました。
ARG=`read -p "ARG= " arg; echo $arg`
echo $ARG
↑こんな感じで。 BSD makeとGNU make比較した時
クライアング運用ならBSD makeのが劣っている点はなんですか?
0179名無しさん@お腹いっぱい。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を修正しないということが条件です。
以上、わかる方回答をお願いします。
0180名無しさん@お腹いっぱい。2013/10/05(土) 09:20:10.39
>>179
一時的でよいのであればそのように指定すればよいのではないでしょうか?
$ make HOGE="-opta -optb" 0181名無しさん@お腹いっぱい。2013/10/05(土) 09:29:26.75
>>180
それじゃ解決になりません。
>>179 は例として書いただけで、
実際には HOGE = -opta の部分はもっと複雑で
例えば HOGE = $(FUGA) -Oopt $(BOKE)
みたいに他の変数も参照したりしていて、何に展開されるか自明じゃないです。
そういうのに関係なく、最後に -optb の追加だけやりたいというのを
コマンドラインの make HOGE=... のような書き方で簡単にやりたいという質問です。
では、わかる方(他の方)回答をお願いします。
↓ >>181
他の方でなくて申し訳ないのですが、、、
もしHOGEが一度定義された後、変わらないのであればMakefileを一時的に以下のように変更して、
中身を取り出してはどうでしょうか。
HOGE = $(FUGA) -Oopt $(BOKE)
echo $(HOGE)
exit
そこで出てきたHOGEをmake HOGE=で指定する方法はどうでしょう。
ちなみに>>179でOKだとされたことが
echo "HOGE+=-optb" >> Makefile; make
であれば、最後にHOGEの内容を変えたあと、HOGEは参照されることはないと思われます。 >>182
すみませんが、全然解決になってません。
Makefileの変更は不可です。
あと、>>182の下3行は182さんの間違いです。
Makefileでは、変数の展開だけ先にやって、
その後でルールを実行するので、
Makefileの最終行に変数代入追加を行なっても
それより上の行に書いてあるコマンドでちゃんと参照されます。
すみませんが、そのようなことは理解ずみの方のみ回答をお願いします。
ではどうぞ
↓ >>183
勉強になります。
そうであれば、
$ make -p | grep HOGE
で出てきた、値に何か追加して
$ make HOGE="..."
でどうでしょう。 っていうか、make の仕様をくつがえすようなことはできないよ。
>>179
(cat Makefile; echo HOGE+=-optb) | make -f - >>188
それでも、Makefileの中から $(MAKE) で自分を再帰呼出ししていたら
-f の指定が無意味になるのでNGだよ。残念。 pmake専用
make HOGE="`make -V HOGE` -optb"
CMake 凄すぎワロタwwwwwww
バカなドザの俺でも MinGW で sox を make 出来たwwwwwwww
このアイちゃんツールスゲェwwwwwwww
make loveと入力しても
loveをmakeするルールがないと言われました
照れているのですか?
GNU Make 4.0
Guile が組込まれただと?!
これで一層移植性が悪くなるのか。なんか逆の方向に必死で走ってる。
0196名無しさん@お腹いっぱい。2013/11/23(土) 02:30:05.46
ぼく用メモ
必須項目をfindで列挙するとき-print0オプションをつけると仇となることがある
Makefile で、
%.o : %.cpp
(rule)
と汎用的に書いておき、特定のソースコードはコンパイルオプションを変えてコンパイルしたい
場合、どう書けば良いですか? 上記に続けて
a.o : a.cpp
(rule)
と書いても無視されてしまう…
makefileを分割しないとダメなんですかね?
0199名無しさん@お腹いっぱい。2014/10/19(日) 13:11:51.98
export PATH=/usr/new/bin:/usr/localbin:$PATH
としているのですが、
makeすると /usr/local/binにある方が使われてしまいます。
makeで使われるシェルにPATHを設定するためには、どこにその記述をすればよいのでしょうか。
自分でMakefileを作ったわけではなく
具体的には、gccのmake中のものなんですが。
Makefileの中で再設定されてるんだろ。
gccだったらconfigureとか黒魔術がかかってるから、素人は手出しできない。
PATH=/usr/new/bin:/usr/local/bin:$PATH ./configure hoge
で、うまくいくかも。
0201名無しさん@お腹いっぱい。2014/10/19(日) 14:09:36.84
Makefileの中でPATHかコマンドを変えてるんじゃない?
Configuerで変更できないの?
実際の問題はconfigureが/usr/new/binからコマンドを拾ってくれないという方だったりしませんか?
/usr/new/binにある方を使わせたいコマンドとは何でしょう?
0204名無しさん@お腹いっぱい。2015/05/20(水) 16:26:17.72
+=の利点について教えてください。
HOGE+=123
は、
HOGE:=${HOGE} 123
とも記述できますよね?なら+=の必要性はあるのでしょうか?
何年か使わないうちにすっかりボケてしまった
$(NAME) と ${NAME} って何が違うか分かる方教えてください。
0209名無しさん@お腹いっぱい。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
$
(´・ω・`)
>>209
simply expanded variableにすりゃええ
TEMPFILENAME := $(shell tempfile) >>210
ありがとう、僕の求めていた答えはまさにこれだ。
(`・ω・´)b 0212名無しさん@お腹いっぱい。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)
0213名無しさん@お腹いっぱい。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の提示をお願いします。
宜しく、お願いします。
0214名無しさん@お腹いっぱい。2017/12/29(金) 10:16:11.43
誰でも簡単にパソコン1台で稼げる方法など
参考までに、
⇒ 『宮本のゴウリエセレレ』 というブログで見ることができるらしいです。
グーグル検索⇒『宮本のゴウリエセレレ』
J1PNYU9X0F
0215名無しさん@お腹いっぱい。2018/05/22(火) 03:52:39.42
知り合いから教えてもらったパソコン一台でお金持ちになれるやり方
時間がある方はみてもいいかもしれません
グーグルで検索するといいかも『ネットで稼ぐ方法 モニアレフヌノ』
H2H0Z
0216名無しさん@お腹いっぱい。2024/03/27(水) 19:54:39.12
ネタ抜きでヌニェスいなくなったと思ったら配当無くなってきてるね
0217名無しさん@お腹いっぱい。2024/03/27(水) 20:03:12.18
0218名無しさん@お腹いっぱい。2024/03/27(水) 20:54:47.39
暇だったし
圧巻❗キリン200頭大行進❗
などなど✨
ダブスコチャンスきた時方が球速出てなくてスタイルの問題よ
でも俺は解釈してるだけでつまんない
全員応援しても金ないない言ってるのかそれとも興味なくても不思議
国会でなくなったら本気出すのか