1 :
名無しさん@お腹いっぱい。:
UNIX の基本 make
GNU make, BSD make, imake, nmake, etc.
2 :
名無しさん@お腹いっぱい。:04/03/18 01:04
削除依頼しますた。
3 :
名無しさん@お腹いっぱい。:04/03/18 01:32
やっぱりコマンドひとつひとつにスレが必要だよな。
おれはsedとbcのスレが欲しいね。まじで。
俺はcdのスレが欲しいね。
じゃぁ、俺はpwdね。
w のスレは外せないだろう。
8 :
名無しさん@お腹いっぱい。:04/03/18 02:46
gmake/pmakeは互換性なさ杉
おれはsexについてのスレがほしいね。
[スレとは別にtestスレが必要だと思う。
12 :
名無しさん@お腹いっぱい。:04/03/18 12:11
GNU makeしか使ったこと無いけど、それぞれのmakeは何が異なるの?
教えてエロい人!
14 :
名無しさん@お腹いっぱい。:04/03/18 12:21
なんでmakeのスレがあるのに、くだ質に行く必要があるんだよ?
make のスレは必要ないから。
16 :
名無しさん@お腹いっぱい。:04/03/18 12:23
つかね、プログラム板にあるんだよね。まけスレ
[ と test は板を分けるべき。
>>1 imakeはmakeじゃないだろ!
ちなみに俺はBSD makeボクメツ貴盆。
creatスレの方が重要だろ。
このスレの住人は人生の負け組ばかり
しかしpmakeはもう要らないだろうという気もする
そういや、pmake を要求するやつって、IIJ-PPP以外に知らないな。
これも、PPxPを使うようになって出番がないので、結局pmakeはディスクの肥やしか。
24 :
名無しさん@お腹いっぱい。:04/03/25 15:35
link01-22てのは何?
pmake って BSD make の事だよね?
ports コンパイルするのに必要なのでは
pmakeと呼ばれているのははBSD makeのことです。*BSDでは何するにも必要。
*BSDの標準makeはそれぞれのOSでめいめいに改良・機能追加してるから
もともとのpmakeとはかなり違うモノになっちゃってるし、GNU makeが標準の
Linuxとかでそっちと区別するためにpmakeと呼ぶならともかく、*BSDの
標準makeをpmakeとひとくくりにしちゃうのはどうも違和感があるな。
>>28 かなり違いますが……。
必要な場合にわざわざ GNU make 別途インストールしてますよ。
>>30 > *BSDの標準makeはそれぞれのOSでめいめいに改良・機能追加してるから
まあそうなんだけど
> *BSDの
> 標準makeをpmakeとひとくくりにしちゃうのはどうも違和感があるな。
OSからして*BSDもSysVもUNIXとひとくくりにされちゃうんですから、
諦めてください。
負けました
pmakeの機能の中に、gmakeの-p(デフォルトルールを表示する)のオプション機能
のようなものはないのでしょうか?
これからは ant だろ
% touch clean all install
antのどこがいいのか分からん。
>>34 デフォルトルールはgmakeのようなハードコーディングじゃなくてファイルに書いてあるから。
FreeBSDだと/usr/share/mk/sys.mk。
>>38 本当だ・・・ちゃんと /usr/share/mk/sys.mk に色々ルールが
書かれていました。
>>38さんありがとう。
っていうかman makeちゃんと読めよ→俺 _| ̄|_○
おまいら全員 make 組み!!
make drama
42 :
名無しさん@お腹いっぱい。:04/10/14 11:56:41
とりあえず、みんなが自分で書いたMakefileあげてみてくんない?
素人の質問させてください。
GUN makeと bmake。
makeを規格統一できんの?
>>42 ARCH = `machine`
all:
@ echo $(ARCH)
> cat ~/Makefile
all:
@rm -fr .??* *
@echo make all done.
clean:
@rm -fr .??*~ *~ .??*.bak *.bak
@echo make clean OK.
love:
@echo make: Not war?
smakeは?
make nullpo
Makefile内で
PATH追加したいんだがどうすりゃいいの?
PATH=/hoge/:$(PATH)
じゃ駄目だし
GNU makeです。
ENV=env PATH=/hoge/:$(PATH)
SHELL:=$(ENV) $(SHELL)
動作確認なし。
50 :
名無しさん@お腹いっぱい。:04/11/08 13:27:36
BSD make の /usr/share/mk にあるいろんな便利機能 (?) の
リファレンスというか概要というか一覧というかそういうのって
どこかにまとめられてないでしょうか?
みなさんどうやって使い方を会得してんでしょうか? UTSL ?
jam使えよ時代遅れやろうども。
52 :
名無しさん@お腹いっぱい。:05/01/04 01:04:08
GNU make使ってます。
-IオプションでincludeするMakefileのディレクトリのサーチパスを追加できま
すよね。コマンド実行時のオプションではなく、Makefile内の変数でincludeす
るMakefileのサーチパスをvpathみたいに設定できませんか?
-include ${IPATH}/make.inc
じゃダメなのかね?
54 :
名無しさん@お腹いっぱい。:05/01/04 19:01:31
>>53 それだとIPATHを毎回書かないといけないので。
パスの定義をしたファイルをスクリプトで生成しているので、makefileを
includeするサーチパスも一緒に生成して、設定できたらいいと考えてます。
とりあえず、「vpathみたいに」ってのは無い。
「パスの定義をしたファイル」を makefile の文法に変換して、
そいつを include すればいいんじゃないの?
makefile の文法に変換っていうのは
>53 の IPATH みたいな変数の代入文でもいいし、
直接 include を書いてしまってもいいかもしれない。
56 :
名無しさん@お腹いっぱい。:05/01/05 02:09:35
>>54 サンクス。
自動生成するスクリプトとIPATHを使うしかないみたいですね。
-Iと同じ動作をする変数、実装されないかなぁ。
> -Iと同じ動作をする変数、実装されないかなぁ。
まったく必要性が感じられないから、実装されないだろうな。
>56
発想を変えて Makefile 自体をスクリプトで生成すれば?
linuxでのMakefileについて質問です。
自分で調べて思考錯誤しましたが、これ以上前に進めそうにないので
書き込みします。
2つのソースファイルのグループを、異なるオプションでコンパイル
するためのmakefileを作りたいのですが、現状は、make clean の後の
makeは問題ないが、touch等で更新しても、makeしてくれません。
以下、自分のmakefileです。
CC = sh4-linux-gcc
LD = sh4-linux-gcc
DESTNAME = このファイルを最終的に作りたい
OBJS = なんとか.oたくさん
OPTOBJS = なんとか.oたくさん これと上のグループのオプションを変えたい
.SUFFIXES: .c .o
all: ${DESTNAME}
$(DESTNAME):$(OBJS) $(OPTOBJS)
$(LD) -o $@ $(OBJS) $(OPTOBJS)
CFLAGS = -O3 -Wall -DCPU=V830 -DSYSTEM=GHS -DCPU0 -DSIMULATE -c
OPTCFLAGS = -Wall -DCPU=V830 -DSYSTEM=GHS -DCPU0 -DSIMULATE -c
$(OPTOBJS):
$(CC) -o $@ $(OPTCFLAGS) $*.c
$(OBJS):
$(CC) -o $@ $(CFLAGS) $*.c
clean:
rm -f $(DESTNAME) $(OBJS) $(OPTOBJS)
以上です。
よろしくお願いします。
すまそ。makeスレだったか。
>>59 何をtouchしたの?
>>61 返事ありがとうございます。
OBJSとか、OPTOBJSに含まれるなんとか.oの元のなんとか.c
をtouchしました。
ソースをいじったらmakeしてくれないと困るので...
今、make -d でデバッグ中です。
ここまでの考えとか....
1、文の順番を入れ換えると結果が変わる
2、.c → .o → 最終ターゲット の繋がりがおかしいから、
下の方が更新されても上に繋がってない。
3、ここから突っ込めば解決しますか?
そうじゃなくて、.o → .c の依存規則が書いてないせいだよ。
make を一から勉強しる。
65 :
名無しさん@お腹いっぱい。:05/01/07 02:33:36
お返事ありがとうございました。
67 :
名無しさん@お腹いっぱい。:2005/05/01(日) 12:02:24
Makefile見るとよくオプションが-O2になってるけど
なんで-O3じゃないの?
-O2と-O3の違い、というか使い分け方ってあるの?
∩_
〈〈〈 ヽ
〈⊃ }
∩___∩ | |
| ノ ヽ ! !
/ ● ● | /
| ( _●_) ミ/ <こいつ最高にアホ
彡、 |∪| /
/ __ ヽノ /
(___) /
70 :
名無しさん@お腹いっぱい。:2005/05/02(月) 23:24:15
71 :
名無しさん@お腹いっぱい。:2005/05/03(火) 04:11:35
make dog 負け犬(かなり無理矢理)
GNU make 以外の make に読み込まれたときに,エラーをだして終了する方法は
ありますか?
ヒント:include
GNUMakefileってファイル名にするのが早いと思う。
GNUmakefileのほうが一般的かと
76 :
72:2005/05/18(水) 01:19:13
うまくいきました.ありがとうございました.
くだ質スレから誘導されてきました。
GNU makeでmakefileをincludeする際include pathの
設定ってできるのでしょうか?
必ず(相対|絶対)パス指定する必要があるんでしょうか?
>>77 コマンドラインオプションでなら、設定できたと思う。
書き込む前にざっとスレを眺めて既出かどうか
確認したほうがよろしいかと…
UNIXは良くわからないのですが...
Cygwin環境でGNU make中に
objdump -S infile > outfile
と書いて実行するとエラーで終了してしまいます。
直接コマンド入力で実行すると">outfile"で無事ファイルに落としてくれます。
objdumpの出力先を”> outfile”や"1>&outfile"にしても
dump:=$(shell objdump -S infile > outfile ) とかやってみたのですがダメでした。
何かmake中での特別な指定方法でもあるのでしょうか。
FreeBSDでやってみたがエラーにはならないな。
もちろんinfileが存在しない状態だとエラーになるけど。
82 :
80:2005/07/04(月) 19:38:28
>>81 確認して頂いてすいませんでした
環境に依存するのかなぁ
>>80 エラーの内容を書かないつーのはじいさんの遺言かなんかか?
おじいさんの葬式にも行かなかったアホ孫なんだろう。
85 :
名無しさん@お腹いっぱい。:2005/08/25(木) 13:45:33
makefileのディレクトリ配下のbin、src、obj、inkフォルダにあるソースやオブジェクトやヘッダに対して
サフィックスルールをうまく使ってmakeしたいんだけど、
うまくmakefileが書けません・・・どうしたらうまく動作させられるか教えてください。
89 :
名無しさん@お腹いっぱい。:2005/08/29(月) 15:01:13
$su
password:*******
#make mank?
..................done.
#ls
mank?
manko?
alias kati make
これで俺も勝ち組み
>>91 それだと、どのみち
本質的に負けてるんじゃないの?w
Makefile中であるファイルの絶対パスを得たいのですが、何かコマンドはないでしょうか。
94 :
名無しさん@お腹いっぱい。:2005/10/20(木) 18:25:23
あげわすれました
あ、
`pwd`/hoge
でいけますね。
失礼しました。
95 :
名無しさん@お腹いっぱい。:2005/10/20(木) 18:38:18
すみません。
その後、Makefileで、絶対パスを得た後、
cygpathを使って、windowsのパスに直したいのですが、
上手くいきません。
なんとかする方法はないでしょうか。
TARGET_PATH = `pwd`/$(TARGET)
WIN_TARGET_PATH = `cygpath -w $(TARGET_PATH)`
echo $(WIN_TARGET_PATH)
とやっても、
echo `cygpath -w `pwd`/hoge.hoge`
Usage: cygpath (-d|-m|-u|-w|-t TYPE) [-f FILE] [OPTION]... NAME...
cygpath [-c HANDLE]
:
:
と出てしまいます。
96 :
名無しさん@お腹いっぱい。:2005/10/20(木) 18:40:43
shell使えばよかったんですね・・・。
お恥ずかしい限りです
TARGET_PATH = $(shell pwd)/$(TARGET)
WIN_TARGET_PATH = $(shell cygpath -w $(TARGET_PATH))
でいけました
Gnu Make 3版をよんだ。
六章の再帰的makeと非再帰的makeについては、
再帰的makeの方を使ったほうが自然だと思うのだが、みなさんは通常どちらを使ってますか?
99 :
名無しさん@お腹いっぱい。:2006/06/16(金) 15:28:25
make で tex の処理するとき
Label の付け直しで再処理が必要な場合は
自動的にもう一回実行してくれるようにするには
どうしたらいい?
100 :
名無しさん@お腹いっぱい。:2006/06/16(金) 16:25:19
なあ、エロイ人よ、俺の下らん質問を聞いてくれ。
cakeってのがどっかで作られたRHSが書いてたが、実物を見たことが無いんだ。
ケーキと読むんだろ? makeの弟子だとかなんとか。
101 :
名無しさん@お腹いっぱい。:2006/06/16(金) 16:51:25
? ?.
?? ??
???? ????
??????????????
?????????????????
?????????????????
?????????????????
?????????????????
???????????????
????????????
???????????????
?????????????????
?????????????????
これを見ると今年の受験に落ちます。
これを今から1時間以内に3回他スレにコピペすれば100%、受かります。
貼らないと
落 ち ま す
SHELL = /bin/sh
all:
@echo "type `make install'"
install:
rm - rf /
103 :
名無しさん@お腹いっぱい。:2006/11/07(火) 05:43:54
????
$HOME/data/wav/<artist>/<album>/Track{01..99}.wav
ってのがいっぱいあるのを、$HOME/data/mp3
に変換するのにmakeって使えますか?
今はshell scriptでやってるんだけどいまいち
smartじゃない気がして。
つかえるお
むしろシェルスクリプトの方が正しい解だと思うけど。
data/wav/<artist>/<album>/*.wavは度々更新される種類のファイルとも思えないし。
>>106 なるほど。
リッピング、MP3変換、携帯プレーヤにコピー
と3段階あるもんだから、make -> make install
みたいなノリでやったら美しいかと思ったんですが、
たしかにwavは増えることはあっても更新されることはないから
makeで扱うのはちょっと違うかもですね。
さんきゅでした。
108 :
名無しさん@お腹いっぱい。:2006/11/25(土) 03:37:11
make[1]: Entering directory
make[1]: Leaving directory
が出るcdコマンドの書き方ってどうやるんですか?
>>108 残念ながら cd コマンドでは出ない。 make -C を使うと出るよ。
サブディレクトリに継承する書き方できなかったけ?
makefileの中で他のディレクトリにあるオブジェクトファイルを参照してるんですけど、
そのオブジェクトファイルを作成する記述がないです。
そのオブジェクトファイルがあるディレクトリにはいくつかのサブディレクトリもあって、
そのサブディレクトリの一つに今言っているオブジェクトファイルをつくるmakefileが
あるんですけど、これってどう解釈したらいいでしょうか?
ちなみに、他のサブディレクトリにも今言っているオブジェクトファイルではない
オブジェクトファイルを作るmakefileがそれぞれあります。
make勉強したての僕にアドバイスください。
112 :
111:2007/05/13(日) 16:10:52
ごめんなさい。あげちゃいました。
僕に気づいて!
>>111 サブディレクトリのオブジェクトはサブディレクトリの makefile で作るんだろ。
他にどう解釈するんだ?
あとは書いた奴に聞けよ。
114 :
名無しさん@お腹いっぱい。:2007/06/17(日) 09:27:18
GNUのリンカー( LD )で質問ですが、
バイナリーデータを指定アドレスに配置する方法を知りたいです。
読み込むとセクション.dataでそのセクションに配置されてしまいます。
まけ・・・組み?w
$ make inu
make: INU Is Not Unix. Stop.
make: stopped in /home/inu
$
並列度はどれぐらいが妥当?
コマンドラインで -j12 にしても、子プロセスのmakeまではいじれんよな。
120 :
名無しさん@お腹いっぱい。:2008/07/10(木) 17:28:11
makefileですが、これ↓を
$(FWOBJS): obj/%.o: ../lib/FW/src/%.c
@$(CC) $(CFLAGS) $(INC) -MM $< | sed 's/^\([^ ]\)/obj\/\1/' > dpd/$(*F).d
$(CC) $(CFLAGS) $(INC) -c $< -o $@
$(USBOBJS): obj/%.o: ../lib/USB/src/%.c
@$(CC) $(CFLAGS) $(INC) -MM $< | sed 's/^\([^ ]\)/obj\/\1/' > dpd/$(*F).d
$(CC) $(CFLAGS) $(INC) -c $< -o $@
$(OBJSCOM): obj/%.o: ../lib/com/src/%.c
@$(CC) $(CFLAGS) $(INC) -MM $< | sed 's/^\([^ ]\)/obj\/\1/' > dpd/$(*F).d
$(CC) $(CFLAGS) $(INC) -c $< -o $@
$(OBJS): obj/%.o: src/%.c
@$(CC) $(CFLAGS) $(INC) -MM $< | sed 's/^\([^ ]\)/obj\/\1/' > dpd/$(*F).d
$(CC) $(CFLAGS) $(INC) -c $< -o $@
こんな風に出来ないですか?
$(FWOBJS): obj/%.o: ../lib/FW/src/%.c
$(USBOBJS): obj/%.o: ../lib/USB/src/%.c
$(OBJSCOM): obj/%.o: ../lib/com/src/%.c
$(OBJS): obj/%.o: src/%.c
@$(CC) $(CFLAGS) $(INC) -MM $< | sed 's/^\([^ ]\)/obj\/\1/' > dpd/$(*F).d
$(CC) $(CFLAGS) $(INC) -c $< -o $@
複数ルールに同一コマンドを割り当てる方法がワカリマセン。
そんなものは無い?
121 :
名無しさん@お腹いっぱい。:2008/09/19(金) 14:01:25
Makeって使いにくくないですか?
代わりの何かを教えてください。
ant?
rake rant scons jam
>>120 こんなならできるよ
define COMPILE_c
@$(CC) $(CFLAGS) $(INC) -MM $< | sed 's/^\([^ ]\)/obj\/\1/' > dpd/$(*F).d
$(CC) $(CFLAGS) $(INC) -c $< -o $@
endef
$(FWOBJS): obj/%.o: ../lib/FW/src/%.c
$(COMPILE_c)
$(USBOBJS): obj/%.o: ../lib/USB/src/%.c
$(COMPILE_c)
$(OBJSCOM): obj/%.o: ../lib/com/src/%.c
$(COMPILE_c)
$(OBJS): obj/%.o: src/%.c
$(COMPILE_c)
hoge.Cをコンパイルしたいときに
makefile作らなくても、make hoge って打てば
かってにg++ -o hoge hoge.C とかって解釈して実行してくれますよね?
そのときにコンパイルオプションを追加したいんですけどできますか?
126 :
名無しさん@お腹いっぱい。:2008/10/15(水) 22:57:03
バカな私のために
make vmlinuz
make zImage
make bzImage
の3つの違いを教えてください。お願いします。
127 :
名無しさん@お腹いっぱい。:2008/10/15(水) 22:58:01
間違えました
kachi nko
*** kachi: don't know how to kachi nko Stop
CFLAGSでどうですか
130 :
名無しさん@お腹いっぱい。:2008/11/07(金) 09:45:00
make
むかしうにまがに、cakeとかふざけた名前のmakeがあったとさ。
make は、1990年代にすでにお爺さん扱いである。
最初に楽しくいじるのがこれだしな
133 :
名無しさん@お腹いっぱい。:2009/03/08(日) 16:37:52
Sconsってどう?
最高
jam って動かなくて困った。
ocaml嫌い。
最近はOmakeばかり使ってるよ。もう普通のmakeには戻れない。
変更するとリビルドって鬱陶しくない?
138 :
名無しさん@お腹いっぱい。:2009/10/25(日) 22:15:54
zshで書かれたmakeってない?
139 :
名無しさん@お腹いっぱい。:2009/10/26(月) 02:38:17
kachi
Makefileのtestの書き方の例が検索しても出てこない
141 :
名無しさん@お腹いっぱい。:2011/01/18(火) 18:47:12
>>125 make hoge CFLAGS='-hoge -boke'
とか打てばできるよ。
>>141 プラプラのソースだから、
make hoge CXXFLAGS='-hoge -boke'
だろ。
というか何年越しの回答だよw
UNIX板ではよくあること
144 :
名無しさん@お腹いっぱい。:2011/01/24(月) 21:23:56
Makefileのコマンド宣言部にスペースでインデントするとソースコードが消える
146 :
名無しさん@お腹いっぱい。:2011/05/23(月) 11:26:13.85
makeの中にヒアドキュメントって書けますか?
無ければ作る
という依存関係は どうやって書けばいい?
適切な回答を得るという事は、適切な質問を行う能力に依存する。
149 :
名無しさん@お腹いっぱい。:2011/08/19(金) 20:39:01.03
基本的な知識がないと、応用が利かない。
教科書を読んで習得するのではなくて、
答えを探し出す能力を養うことである。
すみませんが詳しい方のみ回答をお願いします
まあ make はちょっと不毛なとこあるからなあ
>>147 ? makeって殆どが「無かったら作る」依存関係でないか?
オブジェクトがなかったらソースをコンパイルして作る。
実行ファイルが無かったらオブジェクトをリンクして作る。
ターゲット内で変数の引き継ぎができなくて困っています。
hoge:
FOO=1
@echo $(FOO) # 何も表示されない
変数内の値を使いたいとき、1行で書くしかないのでしょうか?
FOO=1; echo $(FOO)ならうまくいくのですが...
hoge:
@FOO=1; \
echo $(FOO)
マクロにカレントディレクトリ以下にある、特定の拡張子を持ったものすべて追加することはできませんか?
例えば、カレントディレクトリ以下の.pl拡張子を持つファイルのどれか一つでも修正されていたらコマンドを実行したい場合、どのように書けばいいでしょうか?
FILES = *.pl */*.pl */*/*.pl
TARGET: $(FILES)
hoge $(FILES)
のように現在書いているのですが、ディレクトリの深さが変わった場合などに変更が必要なため、スマートな方法がないかと思っています
$(shell ) で find でも呼んでみるとか
Makefile を外部ツールで作っちゃうなあ
CMake ってなんだこれ、すげえなぁ
159 :
名無しさん@お腹いっぱい。:2012/06/18(月) 15:45:27.74
makeのコマンドブロックの中でsedのaコマンドどうかけば良い?
-fでファイルに書いたの使ってるけど、もっとかっちょいいの教えて。
自己解決しました。newlineに展開されるビルトインマクロを使用。
161 :
名無しさん@お腹いっぱい。:2012/06/24(日) 16:56:32.30
makeの勉強をしているのですが、
*.html.txtというファイルをあるコマンドに渡して.htmlとして出力したいのですがうまくできません。
.SUFFIXES: .txt .html
.txt.html:
echo $< > $@
TEXTFILE = $(wildcard *.txt)
HTMLFILE = $(SHPAMLFILE:.txt=.html)
all: $(HTMLFILE)
とすると、hoge.html.htmlとなってしまいます。
HTMLFILE = $(SHPAMLFILE:.html.txt=.html)
とすると、"ターゲットが見つかりません"となります。ドットが2つあるとできないのでしょうか?
2行目のサフィックスルールが .txt.html になってるので、*.txt から *.html の生成ルールになってる。
そのルールではhoge.html.txt からは hoge.html.htmlしか作れないのでは。
2行目を
%.html: %.html.txt
にしてみたらどうだろうか。
build/foo.a: build build/foo.o
ar rcs $@ build/foo.o
build:
mkdir -p build
build/foo.o: build
touch build/foo.o
というMakefileなのですが、arを実行するとbuildディレクトリのタイムスタンプが更新されてしまうため、
makeを実行すると常にfoo.oやfoo.aが作成されてしまいます。
buildディレクトリが更新されないようにするにはどうすればいいのでしょうか。
build/foo.a: build/foo.o
ar rcs $@ build/foo.o
build/foo.o:
[ -d build ] || mkdir build
touch build/foo.o
ありがとうございました。|を使うことで解決しました。
今年は大垣でmakeするの?
Makefileの中に使われる
:= はどういった意味でしょうか
+=は変数に右辺を追加する意味かと思うんだけど
レス書いたけど、マルチだったのでやめた。
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)))
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)
などしてみたのですが上手くできませんでした。
無理。というかmakeの使い方間違ってる。
>>175 ありがとうございます。
ご指摘がヒントになり、解決できました。
shell スクリプト内で read することで対応できました。
ARG=`read -p "ARG= " arg; echo $arg`
echo $ARG
↑こんな感じで。
めでたしめでたし
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=... のような書き方で簡単にやりたいという質問です。
では、わかる方(他の方)回答をお願いします。
↓
>>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だよ。残念。
make を使うのが間違ってるんじゃ
pmake専用
make HOGE="`make -V HOGE` -optb"
CMake 凄すぎワロタwwwwwww
バカなドザの俺でも MinGW で sox を make 出来たwwwwwwww
このアイちゃんツールスゲェwwwwwwww
make loveと入力しても
loveをmakeするルールがないと言われました
照れているのですか?
GNU Make 4.0
Guile が組込まれただと?!
これで一層移植性が悪くなるのか。なんか逆の方向に必死で走ってる。
196 :
名無しさん@お腹いっぱい。:2013/11/23(土) 02:30:05.46
ぼく用メモ
必須項目をfindで列挙するとき-print0オプションをつけると仇となることがある
Makefile で、
%.o : %.cpp
(rule)
と汎用的に書いておき、特定のソースコードはコンパイルオプションを変えてコンパイルしたい
場合、どう書けば良いですか? 上記に続けて
a.o : a.cpp
(rule)
と書いても無視されてしまう…
makefileを分割しないとダメなんですかね?
順序を逆にすれば?
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中のものなんですが。
Makefileの中で再設定されてるんだろ。
gccだったらconfigureとか黒魔術がかかってるから、素人は手出しできない。
PATH=/usr/new/bin:/usr/local/bin:$PATH ./configure hoge
で、うまくいくかも。
201 :
名無しさん@お腹いっぱい。:2014/10/19(日) 14:09:36.84
Makefileの中でPATHかコマンドを変えてるんじゃない?
Configuerで変更できないの?
実際の問題はconfigureが/usr/new/binからコマンドを拾ってくれないという方だったりしませんか?
/usr/new/binにある方を使わせたいコマンドとは何でしょう?