03/02/23 01:05
>>262
OSTYPEでうまくいきそうですがLinuxは両方linux-gnuになってしまいます。
setやenvにはディストリビューションの情報はなさそうです。
両者の区別は可能ですか?
264:デフォルトの名無しさん
03/02/23 01:09
>>263
サポートしているモノのうちのひとつを引数で受け取る仕様に汁。
265:デフォルトの名無しさん
03/02/23 09:51
Linux,CygwinではGNUmakefileをつくって、その中で
SYSTEM := $(...) # ディストリビューションを見分けるプログラムを呼ぶ。
include Makefile
266:デフォルトの名無しさん
03/02/23 09:51
>>265
> SYSTEM := $(...) # ディストリビューションを見分けるプログラムを呼ぶ。
しまった。$(shell ...)ね。
267:山崎渉
03/04/17 16:04
(^^)
268:山崎渉
03/04/20 03:54
∧_∧
( ^^ )< ぬるぽ(^^)
269:デフォルトの名無しさん
03/05/26 21:53
GNU make 3.79 使ってます。
make の本(GNU make の本ではありません)に
.SUFFIXES:
と書くとサフィックスに関するデフォルトの設定をクリアできると書いてありましたが、
GNU make でやってみると何かデフォルトの設定も使われているようなんですね。
-r オプションは使わないとすると、
GNU make では Makefile にどう書けばいいんでしょうか?
実際に問題が発生した例)
debug.cpp と debug ターゲットがある場合、
make debug とやると .cpp: サフィックスルールも適用されてしまう。
270:デフォルトの名無しさん
03/05/26 21:58
unameじゃだめなの?
271:デフォルトの名無しさん
03/05/26 22:00
あ、ごめん。なんでもない
272:デフォルトの名無しさん
03/05/27 01:37
>>269
.PHONY ではなくて?
273:269
03/05/27 08:55
>>272
できました!
ありがとうございました。
274:山崎渉
03/05/28 12:42
∧_∧
ピュ.ー ( ^^ ) <これからも僕を応援して下さいね(^^)。
=〔~∪ ̄ ̄〕
= ◎―◎ 山崎渉
275:デフォルトの名無しさん
03/06/14 02:02
あげ
276:デフォルトの名無しさん
03/06/20 09:07
cygwinのmakeで、コマンドラインが長すぎるときにエラーが出てしまいます。
同じコマンドラインでも、Windows98上ではエラーにならず、Windows2000では
エラーになります。
エラーメッセージは
make: *** [target] Error 255
というもので原因や対策がはっきりわかりません。
検索すると、よく知られた問題のようですが、根本的な解決方法は見つかりませんでした。
というわけで、
おしえて、えろいひと。
277:デフォルトの名無しさん
03/06/20 13:16
>>276
解決法: コマンドラインの引数を少なくする
……しかないんじゃないの?
278:276
03/06/22 16:18
>>277
すでに動いていた環境でファイル数が増えたからエラーになったのです。
そんなわけで、簡単に引数は少なくできません。
cygwinスレにでも逝ってみます。
279:山崎 渉
03/07/15 10:44
__∧_∧_
|( ^^ )| <寝るぽ(^^)
|\⌒⌒⌒\
\ |⌒⌒⌒~| 山崎渉
~ ̄ ̄ ̄ ̄
280:山崎 渉
03/07/15 14:04
__∧_∧_
|( ^^ )| <寝るぽ(^^)
|\⌒⌒⌒\
\ |⌒⌒⌒~| 山崎渉
~ ̄ ̄ ̄ ̄
281:デフォルトの名無しさん
03/07/23 21:24
最近、Linux、Solarisの開発を始めた者です。
gmakeの質問させてください。
Linux上で
$(DEPDIR)/%.d: $(SRCDIR)/%.cpp
<tab>@[-e $(DEPDIR)] || mkdir $(DEPDIR)
<tab>@$(CXX) -なんとか…
って感じで動かしてたんですが、
Solaris8に移植してgmakeかけようとしたら
/bin/sh: test: 引数が足りません。
とか言われてしまいます。
[-e $(DEPDIR)]
でなんでつまづくかわかりません。
ご存知の方がいたら、教えてもらえないでしょうか
282:デフォルトの名無しさん
03/07/24 13:22
>>281
自己レスです
[がシェルコマンドとは気づかなかった
Solarisのbin/shだと [-eが使えなかった模様
すいませんでした。
283:デフォルトの名無しさん
03/07/24 17:53
あるだろ。
URLリンク(www.freebsd.org)
ところで[]の内側にほんとにスペース入れてないのか?
284:デフォルトの名無しさん
03/07/24 21:27
>>283
いれてません。
bin/shで-eオプションがないようです。
bin/ksh じゃないと駄目みたいなんですが、
GUN makeってbin/shじゃないと駄目ってのはありませんでしたっけ?
285:デフォルトの名無しさん
03/07/24 21:28
>>283
誤解を招くので追記(汗
全角スペースの意味でとりました。
半角は入ってます
286:デフォルトの名無しさん
03/07/24 22:35
じゃ[ -d $(DEPDIR) ]は?
287:デフォルトの名無しさん
03/07/25 12:45
>>286
「-d filename
ファイル filename が存在し、ディレクトリであれ ば真。」
あぅ、こーいうものがあったんですね。
試してみます、ありがとうございました。
288:デフォルトの名無しさん
03/07/27 19:15
clean:
(TAB)rm *.o
(TAB)rm *.a
って書いたら *.o がない時点でエラーになっちゃって *.a が消されません
みなさんはこういう時ってどうしますか?
rm *.o *.a とかでしょうか?
289:デフォルトの名無しさん
03/07/27 19:42
-rm
rm -f *.o *.a
290:山崎 渉
03/08/02 02:16
(^^)
291:三村
03/08/04 21:16
>>276
えろいひとかよっ!
292:山崎 渉
03/08/15 16:24
(⌒V⌒)
│ ^ ^ │<これからも僕を応援して下さいね(^^)。
⊂| |つ
(_)(_) 山崎パン
293:デフォルトの名無しさん
03/08/24 13:10
大きいプロジェクトをmakeしていると、今どの程度makeが終わったのか分からなくて不安になるんですが
進捗を表示しつつmakeする方法ってありませんか?
294:デフォルトの名無しさん
03/08/24 13:17
echo
295:デフォルトの名無しさん
03/08/24 14:40
>>293
@を外す
296:デフォルトの名無しさん
03/08/24 15:35
希望が「完成率 30%」とかの表示だと、難しそうな気がする…
297:デフォルトの名無しさん
03/09/14 13:55
砂時計を使う。
298:デフォルトの名無しさん
03/09/14 14:49
>>293
大きいプロジェクトならmakefile分割しなよ。
そうすれば望みもかなうし管理も楽になるから。
299:デフォルトの名無しさん
03/09/14 14:51
date;make
後は、現在時刻と表示された時刻を見比べて、「どの程度」なのかを推測しろ。
できるよな? な?
300:300
03/09/16 23:50
この偉大なスレの300が数日間も放置されていようとはな。
301:デフォルトの名無しさん
03/09/16 23:53
出来れば300日間放置してほしかった
302:デフォルトの名無しさん
03/09/18 17:58
すみません。FreeBSD の make で使える
.for n in $(NAMES)
.for v in $(VALUES)
result-$(v)-$(n): foobar data-$(n)
./foobar $(v) < data-$(n) > result-$(v)-$(n)
.endfor
.endfor
こういう構文を GNU make で書くにはどうすればいいんでしょうか?
ループが一重なら % を使って書けるのですが、2つ変化する部分があると
どう書いたらいいものか...
303:デフォルトの名無しさん
03/09/19 06:28
3.80から使えるeval(URLリンク(www.gnu.org))を使えば、
define RULE_TEMPLATE
result-$(v)-$(n) : foobar data-$(n)
./foobar $(v) < data-$(n) > result-$(v)-$(n)
endef
$(eval $(foreach n,$(NAMES),$(foreach v,$(VALUES),$(RULE_TEMPLATE))))
と書けるみたい。(全角スペースはタブね)
304:デフォルトの名無しさん
03/09/22 14:35
makeの次がantとはね・・・
この中間にある書きやすくて読みやすくて高機能なビルド支援ツールってないのかね。
305:302
03/09/22 17:44
>>303
おお、ありがと。
しかし、自分用の makefile ならいいけど、配布用だとまだ使うのは早いかな...
306:303
03/09/23 07:12
>>305
eval使わない場合は、 -include のファイルが更新対象になるのを利用して、
NAMES:=a b c
VALUES:=1 2 3
RULE_FILE:=.rules
$(RULE_FILE) : $(MAKEFILE)
{ \
$(foreach n,$(NAMES),$(foreach v,$(VALUES), \
echo 'result-$(v)-$(n) : foobar data-$(n)' ;\
echo ' ./foobar $(v) < data-$(n) > result-$(v)-$(n)' ;\
)) \
}>$@
-include $(RULE_FILE)
と書けるみたい。(全角スペースはタブね)
307:302
03/09/24 01:29
>>306
おお、makefile を更新したら、ちゃんとルールファイルを更新してから
include するんですね。これは使えそうです。どうも、ありがと。
# $(MAKEFILE) は自分で値を設定しておかないといけないみたいですね。
308:デフォルトの名無しさん
03/10/06 03:34
ant
309:デフォルトの名無しさん
03/10/19 12:42
giant-ant
310:デフォルトの名無しさん
03/10/25 02:26
ム板の板歌
パスカルに逢わせてくれてありがとう~♪
311:デフォルトの名無しさん
03/10/25 04:51
どなたか教えてください。(SunOS)
Makefile
--------------------
FILE_1 = a.tmp
FILE_2 = ${FILES_1:.tmp=.tmp2}
FILE_3 = *.tmp
FILE_4 = ${FILES_3:.tmp=.tmp2}
all::
@echo ${FILES_1}
@echo ${FILES_2}
@echo ${FILES_3}
@echo ${FILES_4}
--------------------
実行結果
> make
a.tmp
a.tmp2
a.tmp
*.tmp2
FILES_4 でFILES_2 と同じ結果を得たいのですが、
思ったようにできません。
make のみで FILES_2 と同じ内容を FILES_4 に
設定することは可能でしょうか?
312:デフォルトの名無しさん
03/10/30 22:43
さわやかSUN組
313:デフォルトの名無しさん
03/11/04 03:00
GNU make の $(error ...) ってどのバージョンから使えるんですか?
314:デフォルトの名無しさん
03/11/16 00:07
makeのスレなんて流行らないよ。
makeなんて初心者虐め、他文化虐め、異端者排除の大好きなUN*X厨の道具だもの。
その証拠にこのスレでは幾多の質問が無かった事のように流されてきたじゃない?
315:デフォルトの名無しさん
03/11/16 00:52
makeを使うのに、
makefileを書く必要はないんです。
ただ単に、hello.cをコンパイルしたければ
「make hello」とか「make hellow.exe」と打つだけです。
何が難しいんですか?
...makefileを書かねばならんのは、
分割コンパイルをや非標準のライブラリの導入をする
中級者以上だけです。
316:いなむらきよし
03/11/16 01:04
キケー!
317:デフォルトの名無しさん
03/11/17 09:48
makefileもかけないでプログラマ気取りですか?
318:デフォルトの名無しさん
03/11/17 12:44
俺はMakefileしか書かないよ。
319:デフォルトの名無しさん
03/11/17 13:00
俺はGNUmakefileしか書かないよ。
320:デフォルトの名無しさん
03/11/17 15:29
そのうち
#!/usr/bin/make
なんてスクリプトが書かれるのかな。嫌だな。
321:デフォルトの名無しさん
03/11/17 18:05
書いたことあるよ。
322:デフォルトの名無しさん
03/11/17 22:38
make って微妙に挙動が違うから, GNU make 専用に Makefile を書くか,
いろんな make で扱えるように Makefile を書くかで, 面倒くささが
変わってきて, ちょっといや.
323:デフォルトの名無しさん
03/11/17 22:40
make って微妙に挙動が違うから, GNU make 専用に Makefile を書くか,
いろんな make で扱えるように Makefile を書くかで, 面倒くささが
変わってきて, ちょっといや.
324:デフォルトの名無しさん
03/11/17 22:40
gmake,pmake,nmake
他には?
325:デフォルトの名無しさん
03/11/17 23:10
余計なこと書きすぎるとポータビリティーがないのよ。
7行プログラムじゃないけど、必要最小限、極力簡潔に書くの。
326:デフォルトの名無しさん
03/11/18 02:10
俺はgmakeで統一。
Windowsでもcygwin/binにパス通して使ってる。
nmakeは名前違うからいいけどBorlandのはまんまmakeで激しく迷惑だな。
327:デフォルトの名無しさん
03/11/18 10:03
>>326
同位。
あんな変態的なのがmakeを名乗るな。
しょうがないのでこういうスクリプトをbmakeとつけて使ってる。
#!/bin/sh
bccdir=`type bcc32`
bccdir="${bccdir#bcc32 is }"
bccdir="${bccdir%/*}"
if [ -z "$bccdir" ]; then
echo "$0: bcc32 not found" 1>&2
exit 1
fi
if [ "x$1" = x-C ]; then
cd "$2"
shift 2
fi
PATH="$bccdir:$PATH" exec make "$@"
328:デフォルトの名無しさん
03/11/19 00:52
WideStudioのmingw(GCC WIN32版)とC++Builder6も衝突。
makeをgmake.exeにリネームするとmakeを起動するmakefileが
通らんので、環境変数からmingw32-make.exeのあるディレクトリを
検索し、PATHの中身を並べ替えてexecvp("make.exe"...する
wmake.exeを書かされた。
void rebuild(std::vector<std::string> &buff,
const char *name, char slash = '\\') {
for (std::vector<std::string>::iterator it = buff.begin();
it != buff.end(); it++) {
struct stat st;
if (stat((*it + slash + name).c_str(), &st)) {
; /* ignore:win32-execvpは存在しないディレクトリもPATHに書いていい */
} else {
std::string s = *it;
buff.erase(it);
buff.insert(buff.begin(), s);
return;
}
}
throw std::runtime_error(std::strerror(ENOENT));
}
329:デフォルトの名無しさん
03/11/19 01:01
書かされたって仕事でWideStudio使ってるのか?
330:デフォルトの名無しさん
03/11/19 03:22
>>329
仕事じゃないよ。でも後で使うつもり。
低機能だけどMFCやVCLよりシンプルで使うのがラクだからね。
331:デフォルトの名無しさん
03/11/21 12:38
windowsでmakefileなんか書くなバカ
332:デフォルトの名無しさん
03/11/22 13:44
>>331
5年ほど前、100m離れた自席とマシン室の間往復するのが面倒で、
自席のPCにCygwin入れてマシン室のサーバ機からtelnetでログイン、
nmake叩いてコンパイル、できたファイルをFTP GETとかやってた。
あの頃はTerminal Serviceがまだ標準じゃ無かったんで、nmake
マンセーだったよ。
333:デフォルトの名無しさん
03/11/24 14:07
いまはリモート接続とかあるけどね
334:デフォルトの名無しさん
03/11/30 07:18
Cygwinのmakeで
OSTYPE=$(shell echo $$OSTYPE)
とやってもOSTYPEが空のままなんだけどどうすればいいの?
bashでecho $OSTYPEだとcygwinって表示されるし
linuxでは普通にOSTYPE=linux-gnuがセットされるのに。
335:時代錯誤
03/11/30 07:33
javaならxmlで記述するからな~。makeかぁ、懐かしいね~隔世の感・・・
336:デフォルトの名無しさん
03/11/30 10:31
>>335
お前みたいなのがJavaの品格を貶めているんだよ?わかってる?
337:デフォルトの名無しさん
03/11/30 12:58
>>328
> makeをgmake.exeにリネームするとmakeを起動するmakefileが通らんので、
Makefileの書き方が悪い。$(MAKE)を使うべき。
338:デフォルトの名無しさん
03/11/30 19:10
make allとかやったときサブのmakefileにall渡すのはどのマクロ?
339:デフォルトの名無しさん
03/12/01 00:03
>>338
普通にターゲットだから $@ の模様。
340:デフォルトの名無しさん
03/12/02 01:39
GNU Make だと MAKECMDGOALS つーのもあるが
>>311
> FILE_3 = *.tmp
これも GNU Make だと
FILE_3 := $(wildcard *.tmp)
かな? キモは ":=" を使って、その場で展開しておくこと。
341:デフォルトの名無しさん
03/12/02 20:33
>>340
> キモは ":=" を使って、その場で展開しておくこと。
ををっ、腹ショー!!
342:デフォルトの名無しさん
03/12/06 15:00
make debugってやったらターミナルだとgdb,Xが起動していたらGUIデバッガを起動する。
というのをやりたいんですが、どうやって判別すればいいですか?
343:デフォルトの名無しさん
03/12/06 22:30
>>342
X 上で走っているターミナルの場合はどうすんねん、ってのは揚げ足とりだよなぁ。
とりあえず環境変数 DISPLAY が設定されているか否かで判別すれば?
344:デフォルトの名無しさん
03/12/08 18:11
DEBUGGER := $(if $(DISPLAY),xxgdb,gdb)
debug:; $(DEBUGGER) $(TARGET)
345:デフォルトの名無しさん
03/12/17 23:02
前から思ってたんだけど、makeなんて新しいプログラム用意するんじゃなくて、
シェルスクリプトのライブラリという形で提供すれば良かったんじゃないの?
当時の貧弱な計算機環境だと、巨大なシェルスクリプトが重荷になったのかも
しれないけどさ。新しく文法覚えてツールを使うっていうのは、当時の利用技能の
高いユーザにとっても面倒なことだったと思うけどなあ。
346:デフォルトの名無しさん
03/12/18 01:01
>>345
チンパンジーのアイちゃんですか?
347:デフォルトの名無しさん
03/12/20 15:20
>>8
make: don't know how to make love
348:デフォルトの名無しさん
04/02/14 01:54
make は好きなんで age てみたり.
ところで, Makefile で使う変数名で慣用的なものってどんなのがありますか.
CC, CXX, CFLAGS, LDFLAGS, LIBS あたりはみんな普通に使うんじゃないかと
思うのですが.
349:デフォルトの名無しさん
04/02/14 02:05
mingwのgmakeはUNIX同様に実行ファイルにサフィックス無しを
デフォルトにしてるんで、ターゲットの日付を見てくれましぇん。
なんでこんな変な仕様にしたんだろ。
おきて破りで環境変数MAKEFILES=C:/gcc/etc/make.defsをやってる。
.SUFFIXES:.exe .a .ln .o .c .cc .C .cpp .p .f .F .r .y .l .s .S \
.mod .sym .def .h .w .ch .web .sh
STDLDFLAGS = -Wl,-LC:/gcc/lib
.c.exe:
$(CC) $(CFLAGS) -o $@ $< $(STDLDFLAGS) $(LIBS)
.cc.exe:
$(CXX) $(CXXFLAGS) -o $@ $< $(STDLDFLAGS) $(LIBS)
350:デフォルトの名無しさん
04/02/14 02:21
makeはわかるけどconfigureの書き方がわからない
351:デフォルトの名無しさん
04/02/14 15:35
>>350
さすがに configure 直書きとかじゃないよな?
Autoconf 使ってるのなら↓からぱくってくるなり参考にすればいいんじゃないかな。
URLリンク(www.gnu.org)
352:デフォルトの名無しさん
04/03/25 02:35
ルールのコマンドを実行するシェルの環境変数をmakefile内で設定することはできますか?
設定したい環境変数は複数あって、それらをすべてのルールのコマンドに反映させたいです。
353:デフォルトの名無しさん
04/03/25 06:14
>>348
make -np | grep "="
354:デフォルトの名無しさん
04/03/30 17:50
MSYS + MinGW なんですが、
コンパイルにかかった時間を簡単に計るのは、どうやったらいいですか?
今は、
all: date target.exe
date:
date
target.exe: target.cpp
コンパイル
date
みたいにしてます。
355:デフォルトの名無しさん
04/03/30 17:57
>>354
ストップウォッチ
356:デフォルトの名無しさん
04/03/30 18:05
>>354
time
357:354
04/03/30 19:44
>>356
bin の中を探してたんで、そんなのがあるのを知りませんでした。
>>355
最初は使ってましたが、一分以上待つのはつらいです。
ありがとうございました。
358:デフォルトの名無しさん
04/04/23 09:26
ターゲット、依存ファイル、文字列関数の扱う文字列など、
スペース区切りのリストの中にスペースを含む文字列(ファイル名)を
一つの要素として入れるにはどうしたらいいんでしょうか?
359:デフォルトの名無しさん
04/04/23 10:31
my\ document
みたいに\でエスケープする。
360:358
04/04/23 23:45
>>359
ありがとうございます。
ターゲット、依存ファイルには置けるようになりました。
ですが、文字列関数にわたすと複数の要素に分割されてしまいました。
このエスケープはどんな仕様で動作しているのでしょうか?
マニュアルに書いてあります?
361:デフォルトの名無しさん
04/04/24 14:40
最近、環境を移行する作業してました。
かなり昔に作られたmakeファイルや、誰が作ったのかわからないmakeファイルを
新環境用に「感」で直しつつ作業してました。
ある程度manで調べたりしたけど、本当・・・難しい。
まともな日本語の本ってないんですかね?1にも書いてありますが。
362:デフォルトの名無しさん
04/04/25 09:07
>>360
言語もわからんのに答えられるわけねーだろボケ!
363:358
04/04/25 13:29
>>362
言語?あ・・・。
すいません。GNU makeです。
364:デフォルトの名無しさん
04/05/11 13:36
SRCS=$(shell ls *.c)
とやると.cのファイルが全く無い場合
>そのようなディレクトリやファイルはありません。
というエラーメッセージが表示されてしまいます。
メッセージを出力しないようにするにはどうすればいいですか?
365:デフォルトの名無しさん
04/05/11 14:08
>>364
SRCS=$(shell ls *.c 2>/dev/null) は使いたくないか?
366:デフォルトの名無しさん
04/05/11 22:12
ふつうは、$(shell echo *.c) か $(wildcard *.c) だろ
367:
04/05/21 15:56
makefileって難しいです
質問ですが、
LINUXでg++でコンパイルするmakefileを
作ったんですが、
エンディアンをビッグ<->リトルを
切り替えられるような方法を教えてほしいのですが
CFLAGに設定するようなものなのでしょうか?
368:デフォルトの名無しさん
04/05/21 16:29
>>367
もし,Makefileを手で書いてるなら,g++のオプション-Dを使って,
DEFS = -DWORDS_BIGENDIAN
hoge.o: hoge.cpp
g++ $(DEFS) hoge.cpp
で,ソースの中でプリプロセッサ使ってディスパッチすればいいと思います.
autoheader,autoconf,automake辺りを導入すると更に自動化できて,
例えば,configure.acに,
AC_C_BIGENDIAN
と書いてconfigureを作っておくと,
./configureした環境に合わせてWORDS_BIGENDIANってのを
勝手にdefineしたりしなかったりしたヘッダを自動で作ってくれたりしてくれて
なかなか,便利です.
autoheader,autoconf,automakeの使い方は複雑なのでググッて調べて下さい.
369:367
04/05/21 16:31
>>368
ふええ 懇切丁寧にありがとうございます
いくらググッても なかなか出てこなくて困惑していたんです
ありがとうございます
370:368
04/05/21 16:32
タブ入んないんですね.
>>368
DEFS = -DWORDS_BIGENDIAN
hoge.o: hoge.cpp
- g++ $(DEFS) hoge.cpp
+ <TAB>g++ $(DEFS) hoge.cpp
371:デフォルトの名無しさん
04/05/22 13:13
>>367
そもそもエンディアンに依存したコードを書こうとするのが良くない。
ビットシフトとか何とか使って最初からエンディアンに依存しない実装に汁。
372:デフォルトの名無しさん
04/05/22 13:16
>>371
現実を知れ
タコ助が
373:デフォルトの名無しさん
04/05/22 15:54
>372
>371 は至極当然のことを言ってると思うんだけど、問題になるのは性能なの?
374:デフォルトの名無しさん
04/06/09 17:00
makeなんてバッドノウハウの塊だ・・・階層化するともうめちゃくちゃ
375:デフォルトの名無しさん
04/06/20 14:03
make嫌いや
環境変数LIBを上書きして定義してて2日も悩んでた。orz
あほだ
376:デフォルトの名無しさん
04/06/23 16:50
ソースとオブジェクトファイルが混ざらないように、
オブジェクトファイルの出力先を変えたいんですが、
%.o : %.cpp
$(CXX) $(CXXFLAGS) -c $< -o $(OUTDIR)$@
とか書いてしまうと毎回オブジェクトファイルが生成しなおされてしまいます。
なんかうまい手ないでしょうか?
377:デフォルトの名無しさん
04/06/23 17:07
>>376
オブジェクトファイルの出力先にMakefileを書いて試してみたけど,
依存ファイルのところの記述(:のあと)で親ディレクトリに遡れないみたいで,
これでもうまくいかないですねぇ.
378:デフォルトの名無しさん
04/06/23 20:14
>>376
$(OUTDIR)/%.o : %.cpp
$(CXX) $(CXXFLAGS) -c $< -o $(OUTDIR)$@
379:デフォルトの名無しさん
04/06/23 23:44
なんだ。makeが好きなの俺だけか・・・。
他になんか便利なビルドツールあったらおしえちくり
380:デフォルトの名無しさん
04/06/23 23:46
Antぐらいかな
381:デフォルトの名無しさん
04/06/24 00:43
bjam
382:デフォルトの名無しさん
04/06/24 00:44
>>378
$(OUTDIR)/%.o : %.cpp
$(CXX) $(CXXFLAGS) -c $< -o $@
383:デフォルトの名無しさん
04/06/24 05:15
>>379
MSBuild
384:376
04/06/24 16:15
>>378,>>382
GNU Make 3.80使ってるんだが、
$(OUTDIR)/%.o : %.cpp
だと条件にひっかからね。
385:デフォルトの名無しさん
04/06/24 19:07
ふつー、OUTDIRにMakefileを作って
VPATH = $(SRCDIR)
386:デフォルトの名無しさん
04/06/24 19:10
gnu makeの最新日本語リファレンスってないの?
387:デフォルトの名無しさん
04/06/24 19:53
>>386
fURLリンク(ftp.ascii.co.jp)
だと古い?一つ前なんだけど。
388:デフォルトの名無しさん
04/06/24 22:33
>>384
んなわけねー
$(OUTDIR)%.o : %.cpp
ってオチか?
389:376
04/06/25 21:56
>>385
サンクスコ
390:デフォルトの名無しさん
04/07/13 03:07
VC++(NMAKE)で作ったmakeファイルって
Linuxで使用できるんですか??
おせーてくだされ。
391:デフォルトの名無しさん
04/07/13 20:41
>>390
VC++の自動生成で作ったmakは、nmake方言をバリバリ使用
しているので無理。
つーかそもそもVC++系のcl.exe/link.exeがLinuxには無いし、
各コマンドのオプションもgccとは全然違うんだから、流用しよう
なんて考えが無謀だろ。
nmake方言を極力使わないようにして書いた手作りmakなら、
CC/LD辺りのマクロを変えるだけで動く可能性はあるが。
392:デフォルトの名無しさん
04/07/13 22:13
>>391
上級者様、ありがとうございまっす!
自分の望んだ以上のお答えでありました!
VC++で出来るだけデバッグして、Linuxに持って行って
makeファイルでコンパイルをたくらんでいるのですが、
VC++で作ったmakeファイルではダメですか…
手書きで書かないとダメなんすかねぇ…
393:デフォルトの名無しさん
04/07/23 13:07
総入れ歯、むかし居た会社で
nmake を「ナマケ」て呼んでた '`,、('∀`)'`,、
394:デフォルトの名無しさん
04/07/23 19:51
誘導されてきました
Makefileの中に引数で条件分岐できるif文書きたいんだけど
どうしたらいいでしか?
395:デフォルトの名無しさん
04/07/23 19:53
Make makes make making many problems.
396:デフォルトの名無しさん
04/07/23 19:56
make make make!
397:デフォルトの名無しさん
04/07/23 20:08
>>394
URLリンク(www.ecoop.net)
398:デフォルトの名無しさん
04/07/23 20:18
そんなまともな日本語のドキュメントがあったのか。
399:デフォルトの名無しさん
04/07/26 00:12
再帰的makeする時、上の階層のMakefileで定義した変数
を下位階層のMakefileに継承させたいのですが、どうすればよいでしょうか。
400:デフォルトの名無しさん
04/07/26 00:21
>>399 URLリンク(www.gnu.org)
401:デフォルトの名無しさん
04/08/05 23:55
POSIX標準のmakeってどうして作れないの?
shみたいになんとかしてほしいよ。automakeはよく分らんし。
402:デフォルトの名無しさん
04/08/06 01:35
gnu makeでいいじゃん。
自分のreadmeには必須と書いてあるよw
403:デフォルトの名無しさん
04/08/07 02:59
perlみたいに商用UNIXにも標準搭載してくれりゃ構わんけどな。
404:デフォルトの名無しさん
04/08/07 09:49
automake,autoconf使えばいいじゃん。あれこそ最高のハックだよ。
UNIXプログラマ必須のツールだと思うけどね。だからNetBSDみたいに、
GNUツールの全てのMakefileを自前のmake用に新規に書くのは嫌い。
もちろんビルド時間の節約にかなり貢献してるのは認めるけど。。。。
>>403
gmakeは他のGNU系列のパッケージには依存してないよな。gmake必須と
するのは、別にGNU原理主義とも関係ないと思う。
405:デフォルトの名無しさん
04/08/08 21:28
automake, autoconf使ってるのでもGNU make依存してるのとかあった
ような。(まぁそいつの使い方がなってなかっただけかもしれんが)
406:デフォルトの名無しさん
04/10/08 17:12:14
あげ
407:デフォルトの名無しさん
04/10/11 14:38:29
cookってのはどうなんですか
使ったことないんで使い勝手がわからんばい
408:デフォルトの名無しさん
04/10/28 01:46:23
URLリンク(make.paulandlesley.org)
-MMD だけで良いと思ってましたが、だめなようです。
どなたか解説していただけませんか。
409:デフォルトの名無しさん
04/10/28 01:48:11
boost が好きなんですが、make の替わりに、bjam を使うのはどうなんでしょう?
410:デフォルトの名無しさん
04/10/28 15:07:58
>>409
どっちが君の言いたいことか曖昧な気がするので両方答えてみる。
q1) boostがmakeの代わりにbjam使ってるのってどうよ?
a1) いいんじゃない? ある意味makeよりポータブルだし。
q2) 漏れもbjam使いたいけど、いいの?
a2) チーム開発ならリーダー以下チーム全員に合意を取り付けないと。
個人なら好きなのを使って問題なし。
411:409
04/10/28 16:23:20
>>410
言われてみれば、とってもあいまいでした。
q2) の方を訊いてみたかった個人開発の者です。
今は前に書いた makefile を使いまわして、それなりに満足していますが、
あの boost があえて使う bjam は、どんな感じなんだろうかと思ったんです。
けど、ポータブルなところで選ばれてる気がしてきました。
実際に使ってる人の意見も聞いてみたいです。
412:デフォルトの名無しさん
04/10/30 22:36:17
URLリンク(www.microsoft.com)
GNU make で上のようなことはできませんか?
413:デフォルトの名無しさん
04/10/30 23:12:19
うちの会社の人バッチファイルで全部コンパイルしてるよ。
だから一部だけ修正しても全モジュールリビルドしてリリースしてる。
414:デフォルトの名無しさん
04/10/31 02:03:47
一行変えたら全部コンパイルやり直しなんてやってられないな...
415:デフォルトの名無しさん
04/10/31 02:29:19
自分はmake使ってるけどC++のヘッダにコード書きまくるんで結構遅い・・・
416:デフォルトの名無しさん
04/10/31 10:51:35
>>415
いったい何を書いてるの?
そういう漏れは、Pimpl Idiom 教団に入信しちゃった。
417:デフォルトの名無しさん
04/11/04 10:13:35
VC++でプリコンパイルヘッダガンガン使うようになってからは、
iostreamの代わりにiosfwdをインクルードとかそういう事を考える必要も無くなったな。
418:デフォルトの名無しさん
04/11/04 11:12:25
ガンガンっていうかあまりにあたりまえの機能過ぎて
gccに付いてないのを知ってびびった。
3.xには付いてるんだっけ?
419:デフォルトの名無しさん
04/11/05 04:47:57
>>418
3.4 からです。
何年も待って、やっとキター。と思ったら、3.4 はびみょーな出来栄えだったのな。
420:デフォルトの名無しさん
04/11/06 00:42:40
プリコンパイル済みヘッダて変な日本語だよな
421:デフォルトの名無しさん
04/11/06 12:41:00
別に
422:デフォルトの名無しさん
04/11/07 22:43:24
頭痛が痛いみたいな
423:デフォルトの名無しさん
04/11/07 23:07:36
precompil"ed" headerなんだから、特に変だとは思わないけど。
424:デフォルトの名無しさん
04/11/07 23:37:32
むしろ「済み」だけ日本語にするバランス感覚が受け入れ難い。
425:デフォルトの名無しさん
04/11/08 01:54:48
プリコンパイル済み
は
事前にコンパイルが済んでいる
だろ。どこがおかしいのやら。
426:デフォルトの名無しさん
04/11/08 07:16:26
>>425
それなら「事前コンパイル済みヘッダ」になるだろ。
なぜ「プリコンパイルドヘッダ」ではないのだろうか?
どうやらMSの翻訳が元のようだが。
427:デフォルトの名無しさん
04/11/08 19:53:37
>>426
普通カタカナに直す時に「ド」なんて書かない。あなた日本人?
428:デフォルトの名無しさん
04/11/08 19:55:46
へぇ(嘲笑)
429:デフォルトの名無しさん
04/11/08 20:16:47
なら、プリコンパイルヘッダでいいじゃん。済みなんて入れる必要もない。
430:デフォルトの名無しさん
04/11/08 20:31:05
↑論点ずれてる
431:デフォルトの名無しさん
04/11/09 00:16:14
いまさらMS翻訳にケチつけるなよ。
いったいなにがしたいんだ。
432:デフォルトの名無しさん
04/11/12 08:38:43
>>427
> 普通カタカナに直す時に「ド」なんて書かない。
よくあるがこれは変な習慣だよなあ。そもそも、なんで抜くのかが疑問だ。コレMSが始めたのか?
433:デフォルトの名無しさん
04/11/12 08:51:46
>>427
メモリマップドI/Oとか言うじゃん
434:M.B.
04/11/12 11:33:11
全部読んだが make を自分で書いたアフォは漏れだけだった…… orz
435:デフォルトの名無しさん
04/11/12 12:29:46
>>433
それは「ド」ではなく「ト」では?
436:デフォルトの名無しさん
04/11/13 02:37:12
>434
(;´Д`)
漏れも、なんか make をうまく使いこなせなくて
癇癪起こしちゃって自分で書こうとした事があるよ……
437:M.B.
04/11/13 15:24:17
Java のプログラムを Win 上で開発しているのだが、
昔アスキーで出してたような、.exe 形式の make が見当たんなくてさ、
GNU make のソースを Cygwin 上でコンパイルして
.exe 形式にすりゃあいいと思ったんだが結局ソースが見つからず、
ええい面倒臭え、と思って Java で書いた。
非常にチャチなものだが便利に使ってる。
438:デフォルトの名無しさん
04/11/13 17:13:54
>>437
GNU make のソースが見つからないって、アフォか。
439:デフォルトの名無しさん
04/11/13 19:02:26
てか、cygwinにGNU makeのバイナリがあるだろが。
440:デフォルトの名無しさん
04/11/13 19:03:33
javaならant使えよ・・・
441:デフォルトの名無しさん
04/11/13 19:55:33
ぶかあああああああああああああああああああああああああああああああああ
442:デフォルトの名無しさん
04/11/13 20:52:21
ワロタ
443:M.B.
04/11/13 23:13:39
ぶかー。
444:デフォルトの名無しさん
04/11/13 23:17:33
makefile書くまでもないような処理をバッチファイルで
ftimecomp source target && ( sourceからtargetを作る処理 )
とかはたまにやるけど。ftimecompは自作ツール。
445:M.B.
04/11/13 23:23:45
自作せんとね、使い方忘れるのよ。
いらんものいろいろ作ったなぁ。
446:デフォルトの名無しさん
04/11/14 00:00:07
その自作ツールの使い方を忘れるんで、
Makefileに書いておくんだけどな、おれ
447:M.B.
04/11/14 00:18:42
漏れも自分ちの電話番号とか忘れるんで紙に書いてしまっとくんだが、
どこにしまったか忘れる。
448:デフォルトの名無しさん
04/11/14 00:29:24
>>447 無駄話でageんな
449:M.B.
04/11/14 00:50:29
ここでも言われた _| ̄|○
450:デフォルトの名無しさん
04/11/19 22:59:34
2重コロンの意味がわかんね
よく単一ターゲットに使われるみたいだけど
どういう意味なの?
451:デフォルトの名無しさん
04/11/20 09:13:01
>>450
マニュアル読め
URLリンク(www.ecoop.net)
452:デフォルトの名無しさん
04/11/20 13:19:25
よんだけどわかんなかったんだよぅOTL
453:デフォルトの名無しさん
04/11/20 18:31:09
>>452
カードキャぷたーさくらってマジ面白いよな。
454:デフォルトの名無しさん
04/11/21 17:55:08
>>452
> よんだけどわかんなかったんだよぅOTL
同志よ、俺もわからん。
でも、普通に依存関係書いている分には必要ないような気がする。
455:デフォルトの名無しさん
04/11/21 18:16:18
>>454
少し調べてみた。
all:target.txt
target.txt::source1.txt
@echo do task 1
@echo source is $^
target.txt::source2.txt
@echo do task 2
@echo source is $^
source1.txt source2.txt:
source1.txtが更新されると、「do task 1」が表示され、source2.txtが更新されると「do task 2」が更新される。
両方更新されると、両方表示される。
コロンをひとつにすると、同じターゲットに対するコマンドが二つあると警告が出て、両方更新された場合にも一方のコマンドしか実行されなくなる。
マニュアルにある通り、どのソースが変更されたかによって実行するコマンドを切り替えるための方法だと思う。
456:make に代わる次世代標準
04/11/21 21:03:13
make ってそろそろ引退してほしい。
make に代わる次世代標準はありませんか?
ちなみに Ant は処理系が Java で書かれているし XML 記法だからやだ。
457:デフォルトの名無しさん
04/11/21 21:04:44
make が sh と結びついている時点で最悪なんだよ。
perl か python と結びついてほしい。
たいていの UNIX には perl や python は入っているだろうし。
458:デフォルトの名無しさん
04/11/21 21:05:18
>Ant は処理系が Java で書かれているし
インスコすれば、そんなことは誰もわからない。
459:デフォルトの名無しさん
04/11/21 21:07:49
>>456
MSBuild使え
460:デフォルトの名無しさん
04/11/22 00:01:46
>>457
個人的にはAWKと(ry
461:デフォルトの名無しさん
04/11/22 02:57:27
>>456
次世代標準なんかじゃないけど、jamとかどうですか?
URLリンク(www.freetype.org)
462:デフォルトの名無しさん
04/11/22 08:35:38
>>457
SHELL変数をうまく使え
463:デフォルトの名無しさん
04/11/22 09:26:18
464:デフォルトの名無しさん
04/11/23 13:13:19
MinGWのmakeで処理していますが、
a.hpp : b.hpp
の依存関係の解決方法を教えていただけないでしょうか?
465:デフォルトの名無しさん
04/11/23 17:01:09
>>464
依存関係を解決するとはなんぞや?
466:464
04/11/23 17:45:13
いろいろ調べていた時に、サイトで使われていた表現ですが、
間違っていたのでしたら申し訳ありません。
a.hppにおいて、
#include "b.hpp"
となっているとして、
b.hppを編集した場合、a.hppをインクルードしている各々のobj(cpp)ファイルが
その都度コンパイルされて欲しい、ということです。
467:デフォルトの名無しさん
04/11/23 17:54:16
>>466
gcc -MM
makedepend
このへん調べれ。>408のリンク先もけっこういいな。
468:デフォルトの名無しさん
04/11/23 17:59:56
ヘッダの依存関係のチェックやビルド後のリリース用スクリプト
(どっかにコピーするとか)の記述なんかもサポートしたMakefileの
フレームワークというかお手本みたいなのってどっかにないの?
0から手書きするのめんどくさ過ぎ。かといってAutoなんたらとか使いたくないし。
469:デフォルトの名無しさん
04/11/23 18:35:14
>>468
>ヘッダの依存関係のチェックやビルド後のリリース用スクリプト
>(どっかにコピーするとか)の記述なんかもサポートしたMakefileの
>フレームワーク
Autoなんたらはそのためにあるのだが....
470:デフォルトの名無しさん
04/11/23 19:47:11
>>467
早速調べてみます。有難うございます。
471:466(464)=470
04/11/23 19:49:50
466(464)=470です。すいません。
472:デフォルトの名無しさん
04/11/23 21:02:27
>>464
自分も最近makeを使い始めたんですが、ヘッダファイルをターゲットとして指定するのがそもそも間違いでは??
ターゲットはあくまで、その下の行のコマンドによって作成されるターゲットであるはずです。
つまり>>466の場合では、a.hppは、b.hppから”作成"されるわけではないので(ただインクルードされているだけ)、
a.hpp : b.hpp とa.hppをターゲットとして書くのはおかしい気がします。
(ターゲットにヘッダファイルが指定された時にmakeがどのような動作をするのかわかりませんでしたが)
こういう場合は、
オブジェクトファイル: ヘッダファイル1 ヘッダファイル2
もしくは、
ソースファイル: ヘッダファイル1 ヘッダファイル2
とスペースで区切って並べて書いた方がいいかもしれません。こうする事で少なくとも、
ターゲットのオブジェクトファイルやソースファイルと、複数のヘッダファイルとの依存関係は維持出来るはずです。
しかしこれでは、ファイルが増えて来た時に大変そうなので、他にもっと良い方法があるのかも知れませんが…。
473:デフォルトの名無しさん
04/11/23 21:10:51
> もしくは、
>
> ソースファイル: ヘッダファイル1 ヘッダファイル2
ああ、すいませんこれは間違ってますね。
オブジェクトファイルをターゲットとするべきだと思います。
474:デフォルトの名無しさん
04/12/22 18:34:39
外部コマンドを実行するときに
hoge.h : hoge.list
hmaker.exe --prefix=hoge hoge.list
みたいなふうにしたんですが、この=が原因でこの文がマクロ変数に
代入してる式みたいなふうに認識されてしまい升。nmake.exeです。
どうすればいいんでしょうか。
475:デフォルトの名無しさん
04/12/23 03:08:59
make makes make make many problems.
476:デフォルトの名無しさん
04/12/25 02:20:57
cmake使ってる人いる?
477:デフォルトの名無しさん
05/03/02 02:16:06
ソースツリーの中から必要な.h,.cファイルを抜き出すために、
.cのファイルのリスト(SRC)を元にgcc -MMで出力される依存関係を出力し、
それをパースして、必要な.cと.hファイルを出力するperlスクリプトを書いてみました。
files.txt:
gcc -MM $(CFLAGS) $(SRCS) | parse.pl > $@
みたいな感じです。
で、生成されたファイルの中身は、
../src/a.h
../src/dir/b.h
のようにファイルが羅列されており、
これらのパスの"../src"を"package/src"に置き換えたパスにコピーしたいと思っています。
そのルールを書きたいのですが、
srcpackage: files.txt
srcpackage: DSTFILES=$(subst ../,package/src,$(shell cat files.txt))
srcpackage: $(DSTFILES);
../package/%.h : ../src/%.h
cp $^ $@
../package/%.c : ../src/%.c
cp $^ $@
と書いてみたところ、下二つのルールにひっかからず、コピーできないでいます。
他に、
%.c:
cp $@ $(subst package/src, ../ , $@)
というのも試してみましたが、
srcpackageがsrcpackage.cとひっかかってしまい、うまくコピーができません。
どなたかご教示いただけないでしょうか?
478:デフォルトの名無しさん
05/03/02 02:20:46
>>477
> srcpackage: files.txt
> srcpackage: DSTFILES=$(subst ../,package/src,$(shell cat files.txt))
> srcpackage: $(DSTFILES);
これの意味を自分で(日本語で)説明できるか?
できないなら、マニュアル見直せ。
ほかにも問題がありそうだが、まずはそこから。
479:477
05/03/02 16:26:25
>>478
1行目:srcpackageを作るにはまずファイルのリスト(files.txt)への依存を定義
2行目:ファイルのリストのテキストを読み込み、コピー先のパスに書き換え、変数に代入
3行目:コピー先のファイルへの依存を定義
ということをやりたかったのですが、
srcpackage: file.txt;
%.c :
コピー処理
%.h :
コピー処理
のようにすると、file.txtの生成前に後のcat file.txtなどが実行され、
困っていました。
ご指摘の通りあまり理解せずに進めていました。
とりあえずMakefileには
srcpackage: file.txt
make -f Makefile.copy copy
と書き、別のファイル(Makefile.copy)で、
copy: $(subst ../src, package/src, $(shell cat file.txt|./parse.pl | sort | uniq));
%.c:
コピー処理
%.h:
コピー処理
としてみました。
480:デフォルトの名無しさん
05/03/02 20:34:06
>>479
srcpackage: file.txt
を「srcpackageを作るためにはfile.txtが必要」と読め。
481:デフォルトの名無しさん
05/03/03 00:44:11
>>479
やっぱりマニュアル読んで出直せ。
> srcpackage: DSTFILES=$(subst ../,package/src,$(shell cat files.txt))
この構文は、 srcpackage をターゲットとするコマンド内でのみ有効な変数の代入。
グローバルな変数への代入なら "srcpackage: " を削除しろ。
> srcpackage: $(DSTFILES);
これは
srcpackage:
$(DSTFILES)
と同じ意味。
srcpackage を $(DSTFILES) に依存させるのであれば最後のセミコロンを削除しろ。
482:デフォルトの名無しさん
05/03/03 00:55:16
>>477
# ここらへんで SRCS を定義しておくこと。
ASSIGNMENT_OF_USEDFILES:=assignment_of_USEDFILES.mak
$(ASSIGNMENT_OF_USEDFILES) : $(SRCS)
echo 'DSTFILES:=' `gcc -MM $(CFLAGS) $(SRCS) | parse.pl` >$@
-include $(ASSIGNMENT_OF_USEDFILES)
DSTFILES:=$(patsubst ../src/%,package/src/%,$(USEDFILES))
$(DSTFILES) : package/src/% : ../src/%
cp $< $@
.PHONY : srcpackage
srcpackage : $(DSTFILES)
# 動作未確認
483:477
05/03/04 16:25:30
>>480
すみません。以後気をつけます。
>>481
> > srcpackage: DSTFILES=$(subst ../,package/src,$(shell cat files.txt))
>この構文は、 srcpackage をターゲットとするコマンド内でのみ有効な変数の代入。
srcpackageが必要とするファイルを生成する別のルールにも
適当されるものだと勘違いしておりました。
ありがとうございます。
>>482
ありがとうございます。
こちらで試してみます。
484:デフォルトの名無しさん
05/03/05 12:14:47
> srcpackageが必要とするファイルを生成する別のルールにも
> 適当されるものだと勘違いしておりました。
適用されるよ。ルールじゃなくてコマンドに、だけど。
485:デフォルトの名無しさん
05/03/11 01:03:30
GNU make を使っています。
ルールでのファイル指定や、文字列操作関数なんかでは、
要素の区切りがスペースになってるんですけど、
スペースを含む文字列を一つの要素として扱いたい場合はどうすればいいんでしょうか?
$(TARGET_DIR)/target : ...
...
という Makefile に対して、
$ make TARGET_DIR='dirname with spaces'
とされた場合の対処に困っています。
とおもったら、
>>358-360 で少し似た話がでていたようですね。
文字列操作関数の問題が解決してないのか。
486:デフォルトの名無しさん
05/04/27 22:07:37
sconsってどう
URLリンク(www.scons.org)
487:デフォルトの名無しさん
05/05/16 15:24:34
nmakeの使い方を教えてください
488:デフォルトの名無しさん
05/05/16 23:14:49
>>487 URLリンク(www.google.co.jp)
489:デフォルトの名無しさん
05/06/05 19:59:57
MSのnmakeって「this is Not gMAKE」の略称だっけ?
490:デフォルトの名無しさん
05/06/08 13:08:56
GNU make で、複数のターゲットを更新するアクションの
カコイイ書き方教えれ。
例) トークン表とパーサ表を吐く、Bisonに対するアクション指定
491:490
05/06/08 13:15:14
「コマンド連鎖の缶詰を定義する」の章に載ってた
分かりづらいよマニュアル......orz......
492:デフォルトの名無しさん
05/06/12 00:27:29
識者の方、知恵をお貸しください。
ソースファイル(*.f90)が、ファイル数200超あります。
詳しいコンパイルオプションは省きますが、
最終的には下記のように実行モジュールを作成したいのです。
$(TARGET) : $(OBJS)
$(FC) -o $@ $(OBJS)
ところが、OBJSとして指定する(*.o)ファイルが200超あり
OBJS = a1.o a2.o ,,,,, a200.o
と書いていくのが大変です。
Linuxでは
SRCS = $(SHELL *.f90)
OBJS = $(SRCS:.f90=.o)
とすることで、簡単なMakefileを作れたのですが、
GNUのmakeが入っていないマシンで使うこともあり
そこではSHELLが使えませんでした。
”SHELLを使わない”という条件で
この部分を簡単に作成するいい方法はないでしょうか?
ヨロシクお願いします。
493:492
05/06/12 00:28:58
> $(TARGET) : $(OBJS)
> $(FC) -o $@ $(OBJS)
訂正です。
$(TARGET) : $(OBJS)
<---Tab--->$(FC) -o $@ $(OBJS)
です。
494:492
05/06/12 00:31:30
更に訂正っす。
> SRCS = $(SHELL *.f90)
> OBJS = $(SRCS:.f90=.o)
SRCS = $(SHELL ls *.f90)
OBJS = $(SRCS:.f90=.o)
の間違いです。
何度もすいません。
495:デフォルトの名無しさん
05/06/12 12:02:03
>>492-494 URLリンク(www.gnu.org)
496:492
05/06/12 14:51:16
レスありがとうございました。
$(wildcard *.f90)
先ほど試してみましたが、これも存在してませんでした。
他に何か手法があればご紹介お願いいたします。
497:495
05/06/12 14:59:24
>>496 GNU make が使えない環境か。読み間違えてたよゴメン。
498:デフォルトの名無しさん
05/06/12 15:26:42
>492
Makefile を修正するシェルスクリプトを作成してそれを実行するようにすれば?
499:デフォルトの名無しさん
05/06/12 15:35:01
>>498
そしてconfigureにたどりつきAutomakeがワイルドカードに未対応に気付くとか
500:492
05/06/12 16:12:12
>>498
そうですね。最終的にはそうなってしまう可能性もあります。
別途
echo "SRCS = \" > list.mk
ls *.f90 >> list.mk
のようにしてから(正確には.「f90」を「.f90 \」への置換もしてますが)
Include list.mk
とすることでうまくいくことは可能なんですが、
Makefile単体で何とか出来ればなぁ、と思ったので
ご相談しました。
もし何かアイデアあればご教授ください。
なければ、こんな手法でやるしかないっすね。
501:デフォルトの名無しさん
05/06/14 20:53:36
>>500
Sconsというのがあるけど、Python必須らしいです。
URLリンク(www.scons.org)
意外と便利そうです。
import glob
files = glob.glob(wildcard)
502:デフォルトの名無しさん
05/07/21 13:55:49
antなbuild.xmlをMakefileに移植してるんですが、
ディレクトリ移って作業するにはどうしたらよいんでしょう。
cd hoge; だと、その行のコマンドしか駄目ですし。
移るディレクトリにまた、Makefile作っておいて、
さらにmake呼ぶのがmake流なんでしょうか
503:デフォルトの名無しさん
05/07/21 13:57:08
ageます
504:デフォルトの名無しさん
05/07/21 19:17:41
>>502
>移るディレクトリにまた、Makefile作っておいて、
>さらにmake呼ぶのがmake流なんでしょうか
automakeでmakeファイル作るときは
そんな風にするのが一般的だと思う
「make流か」と言われれば
?
505:デフォルトの名無しさん
05/07/21 20:17:33
ん?cdで移動しても問題ないだろ
506:デフォルトの名無しさん
05/07/22 00:51:40
>>502
cd hoge; \
do_something; \
do_anotherthing
507:デフォルトの名無しさん
05/08/14 18:17:10
mingwのmake.exeについて質問です。
include に渡すファイル名に半角スペースが入ってた場合、
¥マークでエスケープしないとダメっぽいんですが、
makeの変数に半角スペースの前に¥マークを置く方法ないでしょうか?
↓これをやってみたんですが無理でした。
$(subst \ ,\\\ , $(VALUE))
または include に半角スペースを含むファイルパスを渡す方法が無いでしょうか?
ちなみに "" で囲ってみたんですがダメでした。
508:デフォルトの名無しさん
05/08/15 13:21:52
半角スペースを含むパスを使わない。
509:デフォルトの名無しさん
05/08/15 15:16:58
超ダサっ!
510:デフォルトの名無しさん
05/08/15 17:30:57
INCLUDE=-I"path 1" -I"path 2"
ふつうにできるょ?
511:507
05/08/17 23:01:21
返信あざっす!
>>508
今から僕のコンパイル作業ディレクトリを変えるのはちょっと・・・
>>509
俺か!?俺のことか!?
>>510
makefile から makefile をインクルードする時のパスですにょん
-include xxxxx.mk
URLリンク(www.ecoop.net)
512:デフォルトの名無しさん
05/08/18 00:47:12
>>511
> 今から僕のコンパイル作業ディレクトリを変えるのはちょっと・・・
includeされる側のディレクトリとは関係ないんじゃないの?
相対パスで指定するとかsymlink張ってみるとか、なんか工夫してみ。
513:デフォルトの名無しさん
05/08/18 04:49:48
>>507
mingwのmakeってcygwin使わないんだっけ?
cygwinのmakeならこんなんで逃げれるけど。
-include $(shell cygpath -m $$(cygpath -d $(VALUE)))
514:507
05/08/18 23:29:14
www.ecoop.net死んじゃったか(´∀`;)
makeの解説よかったのに…勿体無い。
>>512
winなんでsymlinkは無理っす。
相対パスは切実にしたいんだけど、makeの組込定数の$(CURDIR)を使いたいもので、
これが絶対パスを返すので相対パスにできないんですよね・・・。
>>513
cygwinはいれてないなぁ(´∀`;)
まあ、なんとかしてみます。
>>512-513ありがとう。
515:507
05/08/18 23:39:30
というかマイドキュメント(C:\Documents and Settings\xxxx)の配下でコンパイルするのがいけないのか・・・。
いや、でもあきらめたくない。
516:デフォルトの名無しさん
05/08/19 02:18:52
windowsだと短い名前とか使えなかったっけ?
DOCUME~1 みたいなやつ。たしかdir /xで見れたような。
あるいはsubstを使ってみるとか。
517:516
05/08/19 02:20:34
substはシェルのコマンドのsubstね
518:デフォルトの名無しさん
05/08/19 13:43:07
>>514
WinNT移行でNTFSならシンボリックリンクできるよ。
「ジャンクション」或いは"symlink-1.02.zip"で検索して味噌。
519:デフォルトの名無しさん
05/08/19 13:58:59
NTFSの仕様は糞だよな
520:507
05/08/21 01:39:22
>>516
短い名前かぁ。盲点ですた。
>>518
まじっすか
>>519
シンボリックリンクに慣れるとねぇ。あれは便利すぎ。
でも、NTFSにもシンボリックリンクは実装してないだけで、
データ構造の中には予約としてあるっぽいよ
521:507
05/08/21 01:40:59
やば。age設定になってた。ゴメス(^ω^;)
522:デフォルトの名無しさん
05/08/23 12:19:05
>>520
だからね、ディレクトリに関してはジャンクションはディフォルトで使えるんですよ。
ファイルに対するジャンクションが意図的に禁止してあるだけで。
生半可な知識で語るくらいなら>518に書かれているツールの作者のページを読んできな。
523:デフォルトの名無しさん
05/08/23 13:28:11
絶対パスで格納するうんこ仕様
524:デフォルトの名無しさん
05/08/28 19:09:51
makeでsrcディレクトリのソースを
binディレクトリに展開するにはどうしたらよいですか?
525:デフォルトの名無しさん
05/08/28 19:19:06
間違えた
srcディレクトリのソースをコンパイルして
生成物をbinディレクトリに展開したいんです
526:デフォルトの名無しさん
05/08/28 20:53:45
展開ってどういう意味?
527:デフォルトの名無しさん
05/08/28 21:02:30
配置って意味でそ
528:デフォルトの名無しさん
05/08/28 21:15:23
コピーしたいだけなら、普通に copy とか、cp とかすりゃいいんじゃねーの?
529:デフォルトの名無しさん
05/08/28 21:37:51
>>524
「cd bin」でbinディレクトリに移動してからコンパイルすればいい。
../srcディレクトリをVPATH等で指定してやれば問題はないはず。
530:デフォルトの名無しさん
05/08/30 09:09:34
パスと%使ったらうまくできた。
これでターゲットファイル名とソースファイル名のみを書いてやるだけで
自動でオブジェクトファイルだのを別ディレクトリに展開してくれるようになった。
お騒がせして申し訳ない。
531:デフォルトの名無しさん
05/10/24 15:09:12
同じディレクトリで2つのmakeファイルを作成する方法はないですか?
1つめのプログラムをmakeのち実行した後に、2つめのプログラムをmakeのち実行をしたいのですが。
ちなみにcを使っています。
532:デフォルトの名無しさん
05/10/24 15:09:47
ageさせていただきます。
533:デフォルトの名無しさん
05/10/24 16:45:07
ミャケでございます。
質問でございます。
SRCS = \
xxx/yyy/zzz/aiueo.cpp \
qqq/rrr/kakikueyo.cpp \
nnn/ooo/sashimidesu.cpp \
OBJS = $(patsubst %.cpp,obj/%.o,$(SRCS))
このようにしているのですが
OBJSの中身が
obj/xxx/yyy/zzz/aiueo.o
obj/qqq/rrr/kakikueyo.o
obj/nnn/ooo/sashimidesu.o
のようになってしまい、ディレクトリ毎にルールを設定しないと
No rule to make target obj/xxx/yyy/zzz/aiueo.o
のようなエラーが出てしまいます。
*.cppから*.oへの変形途中に
obj/aiueo.o
obj/kakikueyo.o
obj/sashimidesu.o
のように変形させる方法はありませんでしょうか?
gmake 3.80です。宜しくお願いします。
534:デフォルトの名無しさん
05/10/24 23:25:09
>>531
make -f 使えばいいんじゃないの?
535:デフォルトの名無しさん
05/10/24 23:26:55
>>533
$(notdir ...)
536:ミャケでございます
05/10/25 10:39:38
>>535
ありがとうございます。うまくいきました。
537:デフォルトの名無しさん
05/11/04 08:43:29
$(CC) $(CFLAGS) -o $@ $<
を
$(CC) $(CFLAGS) -o $< $<
って書き間違えた……
ヘッダ以外全て消え去ったよ
svnで管理してたから古い状態で復活できたけど、
10個近く新しいファイルを作ってた。
復活できたファイルも変更点がかなりあった……
538:デフォルトの名無しさん
05/11/04 10:30:57
>>537
デフォルトの規則をそのまま使えばいいのに…
539:デフォルトの名無しさん
05/11/04 11:30:34
>>538
VPath使ってたら明示せざるを得なくなった
+
コンパイラの切り替えとか含めててディフォルトルールじゃ対応しきれなくなってた
540:デフォルトの名無しさん
05/11/12 21:10:42
下記のような makefile で make X.a を実行した場合に,x.b y.b z.b が表示
されて欲しいのですが,表示されません.
調べて見た感じでは,「%.a: $($(basename $@))」の $@ が空になってしまう
みたいなのですが,これを動くようにする方法はありますか?
エッセンスだけを取り出したのでやや不自然な記述になってしまっていますが,
要は型ルールの依存ファイルに,マッチした語幹を使用したいってことです.
ただし,実際には X.b に相当する記述がたくさんあるので,下記のような記述
は避けたいと考えています.また,$(eval ) バグがあるので $(eval ) の使用
も避けたいと考えています.
541:540
05/11/12 21:11:08
(続き)
> X.b: x.b y.b z.b
> %.a: %.b
> @# dummy
環境は GNU Make 3.80 です.
アドバイスお願いします.
----------------------------------
X.b := x.b y.b z.b
%.a: $($(basename $@).b)
@# dummy
%.b:
@echo $@
.SUFFIXES: .a .b
書き忘れましたが,下記のような記述もなんかださいので避けたいです.現状,
こうするしかないかなーと考えていますが...注文が多くてすみません.
%.a:
@$(MAKE) $($(basename $@).b)
542:デフォルトの名無しさん
05/11/29 15:29:14
>>17にある質問と同じ内容なのですが
1ソースファイルから1実行ファイルを作るだけの処理を
一気にまとめてやるにはどういう風にmakeをかけば良いでしょうか?
543:デフォルトの名無しさん
05/11/29 17:37:05
ALL: ari.exe ori.exe haberi.exe imasokari.exe
544:デフォルトの名無しさん
05/11/29 21:42:02
>>543
ありがとうございます。
環境の違いを書くのを忘れ申し訳ありません。
とりあえずallで指定しておくんだなと思って、こう書くことにしました。
とりあえず動いていますが、なんかおかしいところがあればご指摘ください。
CC = gcc
TARGET := $(patsubst %.c,%,$(wildcard *.c))
all : $(TARGET)
% : %.c
$(CC) -o $* $<
545:デフォルトの名無しさん
05/11/29 21:47:33
追加。。。
環境はFedora Core 4、gcc 4.0.1、GNU Make 3.80でCのプログラムです。
546:デフォルトの名無しさん
05/12/27 13:12:32
オライリーからmake3版でたお
547:デフォルトの名無しさん
05/12/27 19:22:30
この間、第2版買ったばかりの俺に対するイジメだな。
548:デフォルトの名無しさん
05/12/28 15:47:52
makefileで
# ----------------------------------------
SRCS = SrcDir/test.cpp\
SrcDir/Mod1/test2.cpp
SrcDir/Mod2/test3.cpp
depend:
g++ -MM -MG $(SRCS) > dep.txt
# ----------------------------------------
こうすると
出力が
test.o: SrcDir/test.cpp
test2.o: SrcDir/test2.cpp
test3.o: SrcDir/test3.cpp
こうなってしまいます。
期待しているのは
SrcDir/test.o: SrcDir/test.cpp
SrcDir/Mod1/test2.o: SrcDir/test2.cpp
SrcDir/Mod2/test3.o: SrcDir/test3.cpp
この形です。
何かdependターゲット内の記述でうまく期待した出力をさせるようにできないでしょうか?
549:デフォルトの名無しさん
05/12/28 22:07:47
>>548
試してないが、これでどうかね?
OBJS = $(SRCS:.cpp=.o)
DEPENDS = $(addsuffix .d, $(OBJS))
$(OBJS) : %.o : %.cpp
g++ -c $< -o $@ -MD -MP
-include $(DEPENDS)
これなら明示的に make depend しなくても、
コンパイルが成功するたびに最新の依存関係に更新されて便利。
550:548
05/12/29 19:06:14
>>549
依存関係を更新しないと、コンパイルが必要なファイルが分からないので
コンパイルが成功した時に依存関係が更新されても、手遅れではないでしょうか?
今、それぞれに無理やりディレクトリを付与してしまおうと考えていて、
ここまで来ました。
depend:
$(foreach IT,$(SRCS),\
$(RM) $(IT).dep; echo "$(dir $(IT))" > $(IT).dep; g++ -MM $(IT) >> $(IT).dep;\
)
このあとcatか何かでファイルを纏めればいいと思うのですが、問題は
echo "$(dir $(IT))" > $(IT).dep;
の部分で、出力結果に改行が入ってしまいます。
この改行を入れない方法はないでしょうか?
551:デフォルトの名無しさん
05/12/29 21:50:13
VPATH
552:549
05/12/30 00:17:51
>>550
一番最初は .o ファイルが存在しないから、
ヘッダの依存関係に関係なくコンパイルが必要なことがわかる。
553:548
05/12/30 10:44:49
>>551
VPATHだと、SRCSにわざと含めていない、
別ディレクトリ内の同名ファイルがあると誤動作するんです。
>>552
既に .oファイルが存在する状態でソースコードを編集したら……?
あーあ、 .o よりソースのタイムスタンプが若いからコンパイル対象になるので
無問題なんですね……。
書き込みを拝見する前に力技で解決してしまいました。
力技とはこれ echoex.c
#include <stdio.h>
int main(int argc, char** argv)
{
for (int i = 1; i < argc; ++i)
{
if (i == 1) { printf("%s", argv[i]); }
else { printf(" %s", argv[i]); }
}
return 0;
}
これをコンパイルして実行パスを通しておいて
depend:
$(foreach IT,$(SRCS),\
$(RM) $(IT).dep; echoex "$(dir $(IT))" > $(IT).dep; g++ -MM $(IT) >> $(IT).dep;\
)
cat $(addsuffix .dep,$(SRCS)) > depend.inc
$(RM) $(addsuffix .dep,$(SRCS))
これで……解決?
554:デフォルトの名無しさん
06/03/01 23:24:01
別ディレクトリにあるファイルを関連付けする方法ってないですか?
例えば、ソースがカレントディレクトリ、出力が一つ下のディレクトリだと、
SRC = $(wildcard *.hoge)
DEST = $(addprefix ../,$(SRC:.js=.mage))
.SUFFIXES: .hoge .mage
all: $(DEST)
.hoge.mage:
@echo $@ $<
では上手くいきません・・・
.hoge../.mageみたいに関連付けられないのかなあ
555:デフォルトの名無しさん
06/03/01 23:28:01
ちなみに、いまは、現在のディレクトリに出力して、下のディレクトリにコピーしてます。
556:デフォルトの名無しさん
06/03/02 00:05:11
>>554
パターンルール使え。 % 入ってるやつ。
DEST の定義で .js ってなってるのは書き込み時の間違いか?
あと ../ は一つ上のディレクトリだと思う。
557:デフォルトの名無しさん
06/03/02 00:42:40
>>556
SRC = $(wildcard *.hoge)
DEST = $(addprefix ../,$(SRC:.hoge=.mage))
.SUFFIXES: .hoge .mage
all: $(DEST)
../%.mage:%.hoge
@echo $@ $<
で行けましたー
>DEST の定義で .js ってなってるのは書き込み時の間違いか?
書き換えミスです。
>あと ../ は一つ上のディレクトリだと思う。
ああ、そっか、下でなくて、上ですね。
558:デフォルトの名無しさん
06/03/18 08:08:37
gnu makeでローカルなサッフィクスルールを作りたいのですが、
事情があって生成ファイルにhoge.foo.etcのように複数のピリオドを持たせています。
適切なやり方がありましたら教えてください。
559:デフォルトの名無しさん
06/03/18 18:31:43
>>558
パターンルール使え。 % 入ってるやつ。
560:デフォルトの名無しさん
06/03/20 17:23:30
Visual C++とC++Builderのmakeを両方とも使いたいのですが、どうやったらうまく切り替えられるでしょうか?
561:デフォルトの名無しさん
06/03/20 17:28:22
Outside the United States. If you acquired the software
in any other country, the laws of the country
where you live apply.
562:デフォルトの名無しさん
06/03/21 02:51:13
>>560
なにに困ってるのかサッパリわからん。
普通に使い分けられるだろ?
563:デフォルトの名無しさん
06/03/21 15:51:15
>>560
ん?VisualC++て、nmakeだから、Borlandのmakeとはコマンド違うくない?
564:デフォルトの名無しさん
06/03/24 04:14:47
g++ hoge.cpp -o hoge -O3 -fomit-frame-pointer -funroll-loops -march=opteron -ffast-math
と直接コンパイルしたものと、
CC=g++
CXXFLAGS = -fomit-frame-pointer -funroll-loops -march=opteron -ffast-math
hoge:
というMakefileを作ってコンパイルしたもので、できあがったファイルのサイズが違うのですが
なぜなのでしょうか?
565:デフォルトの名無しさん
06/03/24 07:50:49
コンパイルオプションが違うからwww
566:デフォルトの名無しさん
06/03/24 14:19:56
>>564
お前のその -O3 は一体何なんだと。
567:デフォルトの名無しさん
06/03/24 16:57:22
おっさん
568:デフォルトの名無しさん
06/03/24 18:32:38
90°傾いたウサギ風船
569:デフォルトの名無しさん
06/03/26 02:16:20
1つのMakefile で複数の exe に対応することってきますか?
1 cpp -> 1 exe で。
現状ほぼ同じ Makefile をコピーして指定したソースファイルの名前を編集してやっているのですが、
非常にめんどくさいです。
もし可能ならばさらに、カレントディレクトリにある cpp をワイルドカードばりに取得して、
a.cpp -> a.exe のようにコンパイルしていきたいです。
よろしくおねがいします。
570:デフォルトの名無しさん
06/03/26 02:24:54
>>569 >>559
571:デフォルトの名無しさん
06/03/26 02:28:58
てゆーか、make a.exe でデフォルトルールで作られるだろ。Makefile無くても。
違ったっけ?
572:569
06/03/26 08:42:02
さぱーりわからん。
SRCS = hoge.cc mage.cc #もしくは $(wildcard *.cc) ?
EXES = $(SRCS:.cpp=.exe)
OBJS = $(SRCS:.cpp=.obj)
ときてさてどうすれば?
573:デフォルトの名無しさん
06/03/26 08:45:06
>>572 >>559
574:569
06/03/26 10:10:31
%.o : %.cc
$(CC) -c $(CFLAGS) $(CPPFLAGS) $< -o $@
みたいにかいてもなんにもならないYO.
%.cc の値がどこからくるのかさぱーりわからん。
575:デフォルトの名無しさん
06/03/26 10:14:29
>>574
書いただけじゃ何も起こらないよ。
ゴールを指定して make を実行しないとね。
576:569
06/03/26 10:19:29
>>575
make hoge.o
とやれってこと?
一度の make で全部一気にやりたいって質問だったんだけど。
読み直してみたら、たしかに書いてないな orz
577:デフォルトの名無しさん
06/03/26 10:53:20
>>576
make がどう動くのか、わかってないんじゃないか?
その状態じゃどうやっても無駄だぞ。
578:569
06/03/26 11:36:59
>>577
all: hoge.exe mage.exe shoge.exe
hoge.exe: hoge.cpp
gcc $< -o $@
mage.exe: mage.cpp
gcc $< -o $@
shoge.exe: shoge.cpp
gcc $< -o $@
とかいたとき、make 一度で 1 cpp -> 1 exe を全部作れます。
それをいちいち hoge mage shoge だのかかないでやりたい。
できますか?
579:デフォルトの名無しさん
06/03/26 12:43:00
>>578 >>559
580:デフォルトの名無しさん
06/03/26 13:15:06
>>579
さぱーりわからん。
581:デフォルトの名無しさん
06/03/26 13:20:17
>>580
俺もお前が何がわからんのか、さぱーりわからん。
とりあえず >>578 をパターンルール使って書き変えて動かなかった Makefile 晒せ。
582:デフォルトの名無しさん
06/03/26 15:28:00
%.exe: %.cpp
と書いてやれよ
からかってるんだろうけど不親切にもほどがある
583:デフォルトの名無しさん
06/03/26 16:40:05
>>578
SRCS=$(wildcard *.cpp)
all: $(SRCS:.cpp=.exe)
%.exe: %.cpp
gcc $< -o $@
584:デフォルトの名無しさん
06/03/26 19:54:01
>>582-583
必要な情報はそろっているのに、それだけのものを作れないのは何故か、
知りたかったんだ。スレ汚しスマンね。
585:デフォルトの名無しさん
06/03/27 23:19:08
>>559
Thx.
お猿の訳本しか持ってないんでよくわかんなかったけど、
gmakeのマニュアルをちゃんと読むことにします。
URLリンク(www.ipp.mpg.de)
586:デフォルトの名無しさん
06/04/13 01:08:07
gcc では、-Dマクロ指定が出来ますが、make 実行時に、外からマクロ指定を
したいと思って、make -DAAA=aaa とかやってもエラーになります。
こういうことはできないでしょうか?
587:デフォルトの名無しさん
06/04/13 01:10:04
>>586
make CFLAGS="-DAAA=aaa"
だったような
588:デフォルトの名無しさん
06/04/13 01:12:09
ありがとうございました
589:デフォルトの名無しさん
06/04/22 23:02:52
makeしたら負けかなと思っている
590:デフォルトの名無しさん
06/05/12 02:30:57
rake使ってる人いる?
591:デフォルトの名無しさん
06/05/12 03:23:14
スレタイいいね。
そういう英語の言い回しがあるのかと思ったけど>>1のオリジナルなのか。
592:デフォルトの名無しさん
06/05/12 23:36:57
Ruby初心者スレより転載
URLリンク(shakenbu.org)
593:デフォルトの名無しさん
06/05/13 14:44:26
ダセエ名前だな
なんでも頭文字にRつけりゃいいと思ってやがる
594:デフォルトの名無しさん
06/05/13 15:01:29
ほのぼのRake
595:デフォルトの名無しさん
06/05/13 21:43:16
MakefileならぬRakefileだしなw
まあでもRuby信者の俺には、けっこう便利よ
Rubyに集中できるし
596:デフォルトの名無しさん
06/05/13 23:32:46
makeとantだけでお腹いっぱいです。
597:デフォルトの名無しさん
06/06/01 19:07:06
質問。
hoge.txtとmoge.txtを
それぞれ、xyzzyというツールで、
hoge.fooとmoge.fooに変換したいとします。
他の.txtというファイルは、別のツールで変換したいので、
.foo: .txt というサフィックスルールは使えません。
その場合、
hoge.foo: hoge.txt
xyzzy $< $@
moge.foo: moge.txt
xyzzy $< $@
といちいち書かなくてはいけないのでしょうか。
この
xyzzy $< $@
という部分を共通化することはできないですか?
598:597
06/06/01 19:13:49
どんなことがやりたいかというと、
hoge.foo moge.foo: hoge.txt moge.txt
xyzzy $< $@
みたいに書くと、hoge.fooとhoge.txtが、moge.fooとmoge.txtがそれぞれ対応してくれないかなー
ということです。
599:デフォルトの名無しさん
06/06/01 20:49:14
>>597
>.foo: .txt というサフィックスルールは使えません。
何で?
「.foo は .txt から作る」
「.hoge も .txt から作る」
でいいんじゃ…?
600:597
06/06/01 22:02:56
あー、いや、
同時に、test.txtからtest.fooを、qwertyというツールで作りたかったりするんです。
# もしくは、xyzzyツールの別のオプションで、と読み替えられてもかまいません
そうなると、サフィックスルールだと、hoge.txtもtest.txtも同じように扱われちゃって。
言葉足りなかったですね。
601:デフォルトの名無しさん
06/06/02 00:53:55
>>597
FOO_FROM_TXT=hoge.foo moge.foo
$(FOO_FROM_TXT) : %.foo : %.txt
xyzzy $< $@
602:597
06/06/02 01:01:45
>>601
すげえ!
と思ったけどできませんでした orz
make: *** No rule to make target hoge.txt needed by hoge.foo
みたいに言われました。
gnu makeだと駄目?
こういう機能って、どっかに書いてありますのン?
603:デフォルトの名無しさん
06/06/02 01:04:40
>>602
hoge.txt はあるのか?ファイルがないんじゃないの?
これはスタティックパターンルールっていう構文。
URLリンク(www.gnu.org)
604:597
06/06/02 01:28:17
簡単なテストプロジェクト作ったら、>>601で、うまく動いた
んー、本プロジェクトで動かないのは、別な要因があるようです(´・ω・`)
探ってみます。
>>603
マニュアルにもちゃんとあるんですね。サンクスです。
605:597
06/06/02 02:08:51
わかりました。
>>603のは言っていたのは、正しいです。
本プロジェクトは、hoge.txtがありませんでした。馬鹿だ。
で、どうも根本的にやりたいことを勘違いしておりました orz
hoge_foo_bar.txtやmoge_foo_bar.txtを、hoge_test_bar.foo、moge_test_bar.fooにしたいのでした。
つまり、
hoge_foo_bar.txt→hoge_test_bar.txt
moge_foo_bar.foo→moge_test_bar.foo
という変換をxyzzyというツールで、行いたいのです。
うまいことできないかなー。
606:597
06/06/02 02:09:33
違ってました orz
hoge_foo_bar.txt→hoge_test_bar.foo
moge_foo_bar.txt→moge_test_bar.foo
でした。
607:597
06/06/02 02:20:15
また、違った・・・
hoge_foo_bar.txt→hoge_test_bar.foo
moge_foo_qwerty.txt→moge_test_qwerty.foo
真ん中のfooとtestだけ違うんです・・・。
608:597
06/06/02 02:25:17
%test%.foo: %foo%.txt
なんとかかんとか
とすると、うまく行かないみたいです。
TARGET = hoge_bar_test.foo moge_xyzzy_test.foo
で、
%test.foo: %foo.txt
なんとかかんとか
だとうまくいきます。
%って2回は使えない罠?
名前を変えるところ(foo→test)を最後に持ってくるしかないのだろうか。
609:デフォルトの名無しさん
06/06/02 09:31:03
>>608
% はいっこじゃないとだめ。いっこなら、頭でも途中でもいい。
610:597
06/06/02 19:23:49
了解です。
ファイル名変更して、
%test.foo: %foo.txt
で、いこうと思います。
611:デフォルトの名無しさん
06/07/22 23:36:57
>>1
超いまさらだけど、スレタイ、せっかくだから頭文字mで統一したら?
make makes a massive mess
とか。
612:デフォルトの名無しさん
06/07/22 23:50:02
>>611
語呂が悪い。
make makes many messes のほうがいいかな。
613:デフォルトの名無しさん
06/08/01 14:00:24
暗黙ルールを使うと
ルール連鎖の中で生成された中間ファイルはmakefileにより特別扱いされる。
中間ファイルはターゲットとしては現れず、削除される。
という動作になりますが、これが明示的ルールと同様の動作になるやり方を教えてください。
つまり、
1. 中間ファイルがそのまま残る。
2. (全然別系統もしくは手動による)中途ファイルの変更があったときは、
その中間ファイルからmake処理が行われる。
というようにしたいのです。
614:デフォルトの名無しさん
06/08/01 15:09:19
>>613
何か勘違いしてると思うよ。
中間ファイルは削除されたんじゃなくて、もともと無かったんだよ。
615:デフォルトの名無しさん
06/08/01 21:03:34
>>614
makeを実行すると、こちらの書いたルール通りに実行し、
directoryに中間ファイルがたくさん作られているのが見えます。
また、最後に
rm hoge huge .........
と中途で生成された大量のファイルをrmしているのが見えます。
616:デフォルトの名無しさん
06/08/01 21:57:56
>>615
それは「暗黙のルール」じゃないんじゃないか?
make -pして、何が問題なのかもう一度考えてみるべし。
617:デフォルトの名無しさん
06/08/01 23:29:50
>>613
暗黙ルール使わなけりゃいいんじゃね?
618:k ◆WFGp1NZuiw
06/08/03 21:43:19
.PRECIOUS を使うとか.
URLリンク(www.ecoop.net)
619:デフォルトの名無しさん
06/09/03 21:28:12
GNU makeで複数の拡張子に同じルールを適用したい時に何度も同じものを
書かずにすむ方法はないでしょうか。
たとえば以下の3つのルールを1つにまとめることはできないでしょうか。
%.x: %.abc
command1
command2
command3
%.x: %.def
command1
command2
command3
%.x: %.ghi
command1
command2
command3
620:デフォルトの名無しさん
06/09/03 21:32:12
>>619
これじゃ駄目か?
%.x:
command1
command2
command3
621:デフォルトの名無しさん
06/09/03 21:40:54
>>620
それだと$<が空っぽで使えませんでした。
commandの中で$<と$@を参照してます。
622:デフォルトの名無しさん
06/09/03 21:46:00
>>621
じゃ、続けて
%.x: %.abc
%.x: %.def
%.x: %.ghi
って追加すると、解決できないかね?
駄目だったら define 使えばいいんだけどね。
623:デフォルトの名無しさん
06/09/03 21:53:35
>>622
それだと %.x: %.ghi だけルールが設定されて、
他のルールはコマンドなしのためにキャンセルされないですか?
624:デフォルトの名無しさん
06/09/03 21:54:44
>>623
コマンドなしのルールはキャンセルされるって、どこで仕入れたガセネタだ?
625:デフォルトの名無しさん
06/09/03 22:07:33
>>624
勘違いでした。暗黙のルールをキャンセル方法でした.
結局>>622の方法でも $< は空っぽでした。
626:デフォルトの名無しさん
06/09/03 22:16:37
>>625
実際の依存関係を設定してないんじゃないか?
%.x:
echo $@ $<
に続けて
a.x: a.abc
と書けば a.x a.abc が出力されるだろう。
627:デフォルトの名無しさん
06/09/03 22:38:51
>>626
ファイル一つ一つ書かないとダメですか?
628:デフォルトの名無しさん
06/09/03 22:40:41
>>627
スタティックパターンルールでもいいぞ。
$(ABC_X_FILES) : %.x : %.abc
$(DEF_X_FILES) : %.x : %.def
629:デフォルトの名無しさん
06/09/03 22:58:20
>>628
ありがとうございます。できました。
630:デフォルトの名無しさん
06/09/04 00:15:41
makeから、rakeに乗り換えた。
Ruby使いには、rakeはいいねえ。
631:デフォルトの名無しさん
06/09/15 17:22:16
mingw + GNU make + コマンドプロンプトを使っとる
make[1]: Entering directory ...
の後に表示されるディレクトリ名を絶対パスから相対パスにしたいんだがどうしたらいい?
結果が長くてうっとうしい
うっとうしい以外に害は無いんだけどね
632:デフォルトの名無しさん
06/09/15 17:54:27
そういうパッチあてなされ
633:631
06/09/16 01:52:48
>>632
やっぱ大元に手を加えないとダメか
パッチ見つからんからソース眺めてみるわ・・・
どうもありがとう
634:デフォルトの名無しさん
06/09/17 11:14:28
>nmake love
Microsoft (R) Program Maintenance Utility Version 6.00.9782.0
Copyright (C) Microsoft Corp 1988-1998. All rights reserved.
NMAKE : fatal error U1073: 'love' のビルド方法が指定されていません。
Stop.
。・゚・(ノД`)・゚・。
635:デフォルトの名無しさん
06/09/17 16:43:39
emacsでMakefile中でもCtr-C,Cを押したらコンパイルする技を
昔ネットで見たのですが忘れてしまいました。
どなたか教えてくれませんか?
636:デフォルトの名無しさん
06/09/17 16:52:16
>>635
(add-hook
'makefile-mode-hook
'(lambda ()
(local-set-key "\C-cc" 'compile)
))
637:デフォルトの名無しさん
06/09/17 17:05:23
>>631
そういうフィルタを書くというのは、よくやるなぁ。
ついでに注意すべき warning なんかを強調してみたりとか。
638:デフォルトの名無しさん
06/09/29 00:41:47
>>630
rakeの日本語の資料はどこを見ればいいのかな?
機能をmakeと対比してあるとありがたい。特に再帰処理関係で。
639:k ◆WFGp1NZuiw
06/09/30 22:40:57
>>638
URLリンク(www.dodgson.org)
640:デフォルトの名無しさん
06/10/04 23:08:34
>>636
ありがとう。これでコンパイルが大分楽になる。
lispわかんないと一流のプログラマーにはなれないな。
がんばるよ。
641:デフォルトの名無しさん
06/10/20 21:26:55
lispの出来損ないみたい>>makeの文法
642:デフォルトの名無しさん
06/10/21 06:04:16
lisp厨乙
643:デフォルトの名無しさん
06/10/27 12:04:18
一応確認、まぁ誤植だと思うけど
GNU MAKE
URLリンク(www.amazon.co.jp)
7章 ポータブルなmakefile P129
・・・次に各プラットフォームごとにどういったツールが使えるのか明らかにし、どれを使うのか
明らかにしなくてはいけません。対象となるすべてのプラットフォームで利用可能なツールや機能だけを
使うのが究極の姿です。これは「最小公倍数方式」と呼ばれ・・・
数学しなくなってだいぶたつし、原文読んでないけど、
これって「最小公倍数」じゃなくて「最大公約数」だよな?
644:デフォルトの名無しさん
06/10/27 15:17:43
>>643
原文見てないけど、「最小公分母」の誤訳でしょ。
645:デフォルトの名無しさん
06/10/29 19:04:49
nmakeってsubstとかpatsubstに相当するものないの?
646:デフォルトの名無しさん
06/12/02 23:58:48
暗黙のルールで
hoge.cc -> hoge.o -> hoge
の順番に作りたい時、
hoge.o -> hoge
のときにg++じゃなくてccになっちゃうんだけど、
これってCC=g++にしておくしかない?
647:デフォルトの名無しさん
06/12/03 10:32:31
>>646 何が不満だ?
648:646
06/12/04 02:15:54
>>647
.cも混在してるときに、.cもg++でcompileするでしょ。
そのときに生成されるhoge.oが、
g++ -c hoge.c -o hoge.o
cc -c hoge.c -o hoge.o
で全く同じものになるのかが分からなかったので。
649:デフォルトの名無しさん
06/12/04 10:29:19
man gccしてみろ。
650:デフォルトの名無しさん
06/12/05 14:55:28
>>648
ccでリンクできてるなら、それでまったく問題ない。
g++のときは暗黙に -lstdc++ がつくだけ。
651:デフォルトの名無しさん
07/01/04 21:43:34
a.cpp, b.cpp, c.cpp, ... とファイルが沢山あるとき、各々のファイルに対してgrepした結果を
a.log, b.log, c.log とログにしたいんだけど、どうかけばいいですか?
INFO:
grep COMMENT $(SRCS) > $(LOGS)
みたいにやったら全部のソースを一変にgrepしようとしやがりました。
そうじゃなく個別にやりたいです。
652:デフォルトの名無しさん
07/01/05 01:32:28
それは make でなくシェルスクリプトの話かと。
for i in *.cpp; do grep COMMENT $i > `echo $i|sed -e 's/\.cpp/.log/'`;done
とか。
653:デフォルトの名無しさん
07/01/05 10:41:05
拡張子がcppとlogに決まっているなら、サフィックス・ルールを使用する方法もある。
URLリンク(www.ecoop.net)
654:デフォルトの名無しさん
07/02/13 22:23:13
rakeってC++をmakeできますか?
655:デフォルトの名無しさん
07/02/14 19:27:32
___/ 冫 ∧_∧
∧_∧ _ __ (_ / (´∀` )
( ´∀`)/ ) ) | | // \
( ⊃/ // ∧_∧ (__(_/` |
\__// ( ´∀`) _///
 ̄ ∪ ̄∪ (__(__)
656:デフォルトの名無しさん
07/02/15 03:19:04
>>654
makeの意味わかってる?
gccでコンパイルとか言うのなら、rakeでできるよ。
Makefileがあって、それをmakeしたいのなら、rakeではできない。
makeを使おう。
657:デフォルトの名無しさん
07/02/15 20:52:50
makeは簡単だけどautotoolが全然わからねえ。
まじむずい。autoconf、automake、Makefile.am
Makefile.in、configure.inまじややこい。
658:デフォルトの名無しさん
07/02/15 22:43:13
>>657
最初は手書きMakefileでいいさ。
659:デフォルトの名無しさん
07/02/18 04:52:13
おれもmakeはいいけどautotoolsキライ
makeごと捨て去ってもいいんだけど
なんか他にいいビルドツールないかな?
660:デフォルトの名無しさん
07/02/18 11:07:14
階層が錯綜してるときのmakeって書くのにうんざりするんだけど、
もっと楽ちんなものないのかなあ。
661:デフォルトの名無しさん
07/02/18 13:27:03
rakeとantくらいしかとっさには思い出せないな……
662:autoXXの癌はlibtoolだと思う
07/02/22 01:07:50
共有ライブラリを作らないんだったらautoconf, automake は大体OKだけど。共有ライブラリを作ろうとすると否応無しにで出てくるlibtoolが大嫌いなので書いてみる。
libtoolはクロスコンパイルで「共有ライブラリとそれを利用する共有ライブラリから構成されるパッケージ」を作ることを殆ど考慮してない。
クロスコンパイルだとインストール先ターゲットは/hoegeho/foo/bar とか適当なやつにならざるを得ないケースが多い。
とても/usr/* などにはしてられない。ところがそういう環境だとmake install で「パスのプリフィックスが違います」
エラーが出るわけですよ。実にくだらないんです。だってWindowsだとチェックしないんですから。非Windows環境でやってると結構はまります。
個人としては人生の無駄だし、法人としても無駄なコストです。
その嫌がらせチェックをしている3行程度をコメントアウトすれば平和になるワケだけど。
そうしないと、クロスコンパイル環境でまともに通せるようにするには、
1. 共有ライブラリをnoninst_LIBRARIESにして
2. 展開後のMakefileのルールをMakefile.am に書いてmakeさせ
3. 展開されたあとのinstall処理をMakefile.am に書いておく
くことになるんです。実に馬鹿げてます。本末転倒です。
もしあなたが共有ライブラリを作成してそれをデバッグする必要があるのでしたら、普通に(automakeではなく)伝統的な手書きの makefile を作成してください。
テスト対象の共有ライブラリは -rpath オプションを使ってテストプログラムにリンクしてください。そうすればあなたは最初から共有ライブラリ内にブレークポイントを
設定できるでしょう。変なシェルスクリプトを噛ます必要は無いのです。
autotools、特にlibtoolは開発者のためのツールではないと認識することが大切です。
663:デフォルトの名無しさん
07/03/20 05:00:53
仕事でjam使ってます。サッパリわかりません
664:デフォルトの名無しさん
07/04/24 17:30:42
Rake
URLリンク(www2s.biglobe.ne.jp)
rakeの日本語資料が少ないので、ここいいですね。
665:デフォルトの名無しさん
07/04/24 20:42:09
>>664
Makefileより見た目ゴチャゴチャしててなんかいやだな。
666:デフォルトの名無しさん
07/04/24 21:33:43
>>665
見た目も何もRubyプログラムそのものですからね
Ruby知ってたら、すごい楽できるよ
667:デフォルトの名無しさん
07/04/24 21:34:27
>>665
ゴチャゴチャしてるという印象はこのへんかね。
ターゲット(タスク)を裸で書けない(文字列かシンボルで書く)
ファイル名単独じゃなくて、いちいちfileと書く
:ではなく=>
doとかendとか付ける
外部コマンドをそのまま書けない
>>664
ダグラス・アダムズネタが混ざってるな 。
668:デフォルトの名無しさん
07/04/24 21:46:49
Cプログラマ向けにCの文法で書けるCakefile(ケーキファイル)なんての
を妄想してみたが、Rubyだとブロックで書くところを関数に抜き出さないと
いけないから書きにくいな。C++でboost使うとlambdaっぽいことができる
からマシになるのかな。
669:デフォルトの名無しさん
07/04/24 21:50:45
lakeやらpakeが強いかも。元々適当な言語だし。
670:デフォルトの名無しさん
07/04/24 22:06:16
lakefileは普通のプログラムと見かけ大差なさそう。
pはperlだろうが lispつながり(?)でprologを連想。
ホーン節って依存関係定義そのものだな。
671:デフォルトの名無しさん
07/04/24 22:31:43
dake
672:デフォルトの名無しさん
07/04/24 23:47:56
やっぱ俺Makefileでいいや・・・
673:デフォルトの名無しさん
07/04/25 01:23:22
delake
VBake
make#
674:デフォルトの名無しさん
07/04/25 01:37:29
>>634
つ♥
675:デフォルトの名無しさん
07/04/25 15:04:25
rakeで依存関係をgccに解決させたりしてるときにどう持ってくればいいんだ?
676:デフォルトの名無しさん
07/04/25 21:31:46
>>675
makedependってこと?
677:デフォルトの名無しさん
07/04/25 21:40:32
require 'rake/loader/makefile'
file '.depend.mf' => そーす do |t|
sh 'gcc -M ...'
end
import '.depend.mf'
だろうか。
678:デフォルトの名無しさん
07/04/25 23:22:53
>>664も参照
679:デフォルトの名無しさん
07/04/26 10:50:56
>>676-678
importで導入できるんだね、ありがと
680:奉祝スレ5周年
07/08/17 21:40:54
GNUmakeで--debug=のコマンドで使用できるフラグについて
資料or情報はありませんか?
片っ端からトライしたところ iajvbm の6文字が何らかの機能を
持っているようですが。
巨大makefileのデバッグに使用したいです。
> make -v
GNU Make 3.81
:
:
This program built for i686-pc-cygwin
>
681:デフォルトの名無しさん
07/08/17 22:00:45
普通に info に載ってるけど。
man にも簡単な説明が出てる。
682:デフォルトの名無しさん
07/08/23 02:41:13
このスレ見ててもグチばっかだし、ほんとにmakeって使えないと思う。
(autotools含めてバッドノウハウの塊だと思う)
何故代替品は出てこないんだろう?
オープンソース界隈で普及しすぎて、デファクトになっちゃったのが原因なのかね。
マイクロソフトの独占なんかより、makeの独占を禁止してほしい。
683:デフォルトの名無しさん
07/08/23 02:45:27
>>682
ant, bjam, rake, SCons とかは代替品とは言わんの?
684:デフォルトの名無しさん
07/08/23 05:44:05
autotoolはともかくmakeは無いと困るだろ。
685:デフォルトの名無しさん
07/08/23 22:06:01
>>682
makeも使えない奴はたいしたコードはかけないし、
make使える奴は代替の必要を感じない
そういう意味でsubversion開発者は実に偉大だ
686:デフォルトの名無しさん
07/08/26 22:45:52
>>682
rakeつかってる
687:デフォルトの名無しさん
07/09/05 19:03:57
Rakeのユーザーガイド見つけた
RakeUserGuide - Rake ユーザガイド
URLリンク(www.kyobashi.org)
___
,;f ヽ
i: i
| |
| | ///;ト,
| ^ ^ ) ////゙l゙l; ありがたや~
(. >ノ(、_, )ヽ、} l .i .! | ありがたや~
,,∧ヽ !-=ニ=- | │ | .|
/\..\\`ニニ´ !, { .ノ.ノ
/ \ \ ̄ ̄ ̄../ / .|
688:デフォルトの名無しさん
07/10/03 18:54:33
makeが成功した後に自動的にcleanを実行するようにすることはできませんか?
689:デフォルトの名無しさん
07/10/03 19:00:26
make allの最後に、make clean呼ぶようにするだけでは?
690:デフォルトの名無しさん
07/10/03 19:48:03
>>689
作った物消すのって何したいん?、コンパイルチェックだけ?
691:デフォルトの名無しさん
07/10/03 20:25:19
ただ、FreeBSDのportsシステムのmakeファイルにはうんざり