make makes many prob ..
[2ch|▼Menu]
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のオリジナルなのか。


次ページ
最新レス表示
スレッドの検索
類似スレ一覧
話題のニュース
おまかせリスト
▼オプションを表示
暇つぶし2ch

5375日前に更新/188 KB
担当:undef