make makes many problemsat TECH
make makes many problems - 暇つぶし2ch1:デフォルトの名無しさん
02/08/18 00:51
難しいし方言きつすぎて別の種類の make には使えないし
日本語のまともな資料ないし・・・。

だれかもっと便利でわかりやすいビルドツール作ってくれって感じ?

参考リンク
URLリンク(tanaka-www.cs.titech.ac.jp)
URLリンク(www.tk.airnet.ne.jp)
URLリンク(www-or.amp.i.kyoto-u.ac.jp)
URLリンク(kanon.plala.jp)
URLリンク(lagendra.s.kanazawa-u.ac.jp)

2:デフォルトの名無しさん
02/08/18 00:52
HSP使えば?

3:デフォルトの名無しさん
02/08/18 00:53
問答無用のウンコスレ

4:デフォルトの名無しさん
02/08/18 00:59
Antがアリます。

5:デフォルトの名無しさん
02/08/18 01:00
Antだけに

6:デフォルトの名無しさん
02/08/18 01:07
Antツバキは恋の花

7:デフォルトの名無しさん
02/08/18 01:12
あんと~あん~と~
クソスレだけどスレタイ気に入った。

8:デフォルトの名無しさん
02/08/18 01:17
make love

9:1
02/08/18 01:18
>>7
ありがとうございます。
日本人相手なら早口言葉としても使えます(多分)

MMMP と覚えてください。

10:デフォルトの名無しさん
02/08/18 01:33
HSP使えばいいのに

11:デフォルトの名無しさん
02/08/18 01:33
make(・∀・)キター。

結構期待してたわん。

12:デフォルトの名無しさん
02/08/18 01:49
gmakeで統一しろよ
そうすりゃ方言なんて気にしなくていいだろ。

13:デフォルトの名無しさん
02/08/18 02:52
ここはmake叩きスレというわけではないよな?

VC++のメニューに
メイクファイルのエクスポート
ってのがあることを思い出した。
あれはイイもの?普通?クソ?
(自分が使う機会があるかどうか微妙だけどとりあえず聞いてみる)

14:1
02/08/18 03:09
>>11, >>13
どちらかというと make を語るスレです。
なんか一個も make のスレが無かったので立てました。

15:デフォルトの名無しさん
02/08/18 03:16
automake使えば、makeがgmakeか、gじゃないmakeか判定して、
よきにはからってくれたようなきがする。
automakeで生成したMakefileがHI-UXのmakeでも通ったし。

16:デフォルトの名無しさん
02/08/18 03:32
automake・・・・
なんでmakeごときがあんなに複雑(そう)になるのかね?

17:question
02/08/18 22:57
本に載っているアルゴリズムのプログラムを打ち込んでコンパイルして勉強中です。
するとディレクトリの中に短く単発のソースとバイナリがいっぱいできます。
Makeを使って、Makefile内にソース名を打ち込まないで、
ソースと同名のバイナリをコンパイルすることはできませんか?
具体的には、ディレクトリの中が
seive.cpp shellsort.cpp tree.cpp quicksort.cpp
みたいになってるんです。それを >make 一発で
seive.cpp seive.exe shellsort.cpp shellsort.exe
tree.cpp tree.exe quicksort.cpp quicksort.exe
になるようにできませんか?
この後もどんどん細かいソースが増えるので、Makefileを書き直すのが面倒です。
でも特徴として、1ソース1バイナリになっているので可能な気がします。

18:shige
02/08/18 23:12
Makefileを書き換えずにやるのは無理じゃないか?
新しいファイルがディレクトリにあった場合Makefileを更新するツールを
スクリプト言語で書いた方が手っ取り早いだろう。


19:デフォルトの名無しさん
02/08/18 23:27
SOURCE:=$(wildcard *.cpp)

20:デフォルトの名無しさん
02/08/18 23:30
Antよりmakeの方が簡単

21:shige
02/08/18 23:33
なるほど。


22:デフォルトの名無しさん
02/08/18 23:57
ascii の FTP に、GNU Make のマニュアル日本語版があるよ。
>>1 のページに書いてあるようなことは卒業した人にお勧め。

23:デフォルトの名無しさん
02/08/19 00:36
>>16
システムの全ての必要な要素について、
それがあるか?、またそのバージョンは?
って調べていくんだから、そりゃ大変な作業だろ。

Windowsみたいにまとまってねーんだよ。UNIXは。
微妙な差異がものすごくめんどくさい。

24:デフォルトの名無しさん
02/08/19 03:45
>>23
Windowsだってまとまってねーんだよ。
NTと95は全くの別物。

25:デフォルトの名無しさん
02/08/19 19:48
>>23
いや、それは Autoconf と突っ込んでみる。

Makefile より Makefile.am の方が簡単だと思うし、
自分のところで動けばいいなら autoscan した後、
$ mv configure.scan configure.ac
して、
- AC_CONFIG_HEADER([config.h])
+ AM_INIT_AUTOMAKE([foreign])

- AC_CONFIG_FILES([])
+ AC_CONFIG_FILES([Makefile])
するだけで結構うまくいったりするが、どうよ。
高度な事すると結構面倒だけどね。


26:デフォルトの名無しさん
02/08/19 23:27
Minix のころは make から cc よぶメモリが足りなかったら make -n > hoge; sh hoge とかできたもんだ... あの頃は simpleだったのう。

27:デフォルトの名無しさん
02/08/19 23:31
Antじゃダメなん?
うちの会社、ソースはC++だけどAntでビルドしてるけど、それって異端?

28:デフォルトの名無しさん
02/08/19 23:43
>>27
Javaならね。
UNIXはMakeの資産があるからAntが使われることはないと思う。

29:27
02/08/19 23:44
(´-`).。oO(うちの会社は異端かぁ)

30:デフォルトの名無しさん
02/08/20 00:13
>>27
実行形式がJavaってだけで、動かないプラットフォームがでてくるし。
研究室の古株のDigitalUNIX(not Tru64)、IRIXの古いの、HI-UX、HP-UXあたり。
ライセンスとかハードウェアの関係で最新OSにすることはできないことが多い。

31:
02/08/20 01:23
逆にJavaの開発でmake使ってる人っているんか?

32:デフォルトの名無しさん
02/08/20 03:35
何だってこんな糞ツールがここまで普及したんだろう?
UNIXの連中ってアフォばっかりだな

33:デフォルトの名無しさん
02/08/20 06:08
UNIXはもっとLispに学ぶべきだ

34:デフォルトの名無しさん
02/08/20 17:28
>>29
(´-`).。oO(そんな会社にいたんかぁ)


35:デフォルトの名無しさん
02/08/20 22:18
>>32
融通効くからじゃない?行頭のTabを忘れなければ…。
ビルドの為に手間をかけるのが面倒だったからかもしれんし。

>>33
Lispでmakeに相当するもの…ですか?


36:
02/08/21 00:20
>>27
C++だとmakedependしたいからやっぱりmake

37:デフォルトの名無しさん
02/08/21 01:30
>>36
make depend って、私はいつも gcc -MM でやってるんですが、
他に何か定石的なやり方ってあります?

38:デフォルトの名無しさん
02/08/21 01:34
本来makeの機能ってコンパイラ自身が持っておくべきだと思うんだけどな。
んでpre/postな処理はsh/perlあたりでやればすっきりするはずだよ。

makeって機能が貧弱なわりに(そのせいでか?)人によって
書き方がかなり変わってきてメンテしづらいんだよな。

39:デフォルトの名無しさん
02/08/21 02:06
変態的なマクロとか
環境変数との関係とか
make依存の痴漢ルールとか
そのへんがイヤン

40:デフォルトの名無しさん
02/08/21 02:42
>>37

Xのmakedepend

41:デフォルトの名無しさん
02/08/21 02:47
元となる C言語が貧弱すぎたからな。あと、リンカも貧弱すぎたのかも。
だから makeで外部的に一生懸命書く必要があった。

まあ、逆に Cが貧弱だから、あの程度の仕組みで分割コンパイルの
恩恵にあずかれたのかも。
C++なんか、分割コンパイルをまともに働かせるようにするの
大変そうだし。



42:デフォルトの名無しさん
02/08/21 02:52
別にmakeはCのためだけにあるわけではない。

43:デフォルトの名無しさん
02/08/21 02:58
>>41
とはいえUNIX的ミニマリズムはいい加減古びつつあるような。
PerlやApacheなんかは単体のツールとしてどんどん複雑になっていくように
他のツールも高機能化・複雑化していくのは自然な流れでしょう。

>>42
それがよくない
make setupなんてやるなら
bash setupにしてくれよ。


44:デフォルトの名無しさん
02/08/21 11:14
>>40
サンクスです。makedepend ってツールの名前だったのね。
ちょっと使ってみたけど、たしかに速い。
あと、gcc -MM みたいに、< > で囲んだやつは無視して
くれるともっとよかったけど。

45:デフォルトの名無しさん
02/08/24 18:28
>>43
自分でツールを作りながら処理するような場合は、やっぱり
makeの枠組で出来た方が有難い。

46:デフォルトの名無しさん
02/08/24 18:37
んだんだ。makeとコンパイラはやっぱり分かれてた方がいい。
勝手にされたらされたで不満がでるはず。

47:デフォルトの名無しさん
02/08/25 12:30
>>43
make setupなんて見たことないぞ。


48:デフォルトの名無しさん
02/08/29 04:16
age

49:デフォルトの名無しさん
02/08/29 04:34
VC系の超貧弱makeのことを書いているヤシがいるような
あれはmakeと呼ぶのもおこがましいが...

50:デフォルトの名無しさん
02/08/29 04:35
vc系って何?
makeと呼べる基準って何?

51:デフォルトの名無しさん
02/08/29 12:49
>>2 は何が言いたかったのだろうか。


52:gmake
02/08/30 03:55
|-- mona
| |-- Makefile
| |-- sample.xml
| |-- mona.c
| `-- mona.h
|-- 2ch.so

↑のようなディレクトリ構成の時、
既にある2ch.soを用いてmonaディレクトリでmakeして、
monaってsoつくりたいんですけど、どーやればいいんでしょうか?
誰か助けてください。

53:gmake
02/08/30 04:14
あ、monaっていう実行ファイルでした^^;

54:デフォルトの名無しさん
02/08/30 05:28
>>52
$CFLAGSで出力先を変えればいいだけじゃないの?
-o オプションかね。

55:52
02/08/30 08:25
>54
んーっと、
|-- mona
| |-- Makefile
| |-- sample.xml
| |-- mona.c
| |-- 2ch.so
| `-- mona.h

2ch.soの生成をこうスレって話ですか(?
上の階層のアドインみたいな形にしたいんですけど、毎度コンパイル
しないと駄目なんすかね?
(既にあるのでそれを活用したい)2ch.so生成するルールがねーぞ、
ゴルァってでまふ。

56:デフォルトの名無しさん
02/08/30 18:20
>>55
あなたの日本語が理解できないのだが、
-o やら -L やらで簡単に解決する話のような気がする。

57:デフォルトの名無しさん
02/08/30 19:17
>>55
> (既にあるのでそれを活用したい)2ch.so生成するルールがねーぞ、
> ゴルァってでまふ。
ライブラリパスの設定するだけかも。
2ch.soを作成するのは?ってことならlibtoolでも使ってくれ。


58:52
02/08/31 04:41
パス設定して、でけたー
さんくすこ>56-57

59:デフォルトの名無しさん
02/08/31 11:08
make makes a massive mess.
ってのを思いついた。そんだけ sage

60:デフォルトの名無しさん
02/08/31 12:59
make makes me mad. はどう?つーか、いま FreeBSDの kernel buildでエラーでたから makeをおってるんだけど、さっぱりわかんねー。kmod.mk が動くときの cwdはどこなんだ?

61:デフォルトの名無しさん
02/08/31 15:07
make makes macro maze.

62:デフォルトの名無しさん
02/08/31 23:00
make makes me mad.

63:デフォルトの名無しさん
02/09/01 10:33
make makes more money.
だったらいいなぁ

64:名無し人間
02/09/02 00:12
>>38
web pageの更新にもmakeを使ってるから、
C compilerに統合されたら困るよぉ。

ところで、>>17には>>19で通じたんだろうか?

65:デフォルトの名無しさん
02/09/02 00:24
MS製品のVC++、FrontPage(HTMLエディタ)ともに
make的な機能が統合されてるよ。

思うにUNIXにOOPLが普及してmakeクラスがあればもっと使いやすくなるのでは。

66:デフォルトの名無しさん
02/09/04 10:53
>>65
makeクラスってどういう意味?

67:デフォルトの名無しさん
02/09/04 11:34
MSのmakeはNanchatte make

68:デフォルトの名無しさん
02/09/04 18:56
俺思うんだけど, コマンドラインで実用に耐えるコマンドがUnix系OSに比べて遥かに少ない
Windowsで, makeなんて使いモノになるの?
Windowsで仕事したことないから分からんのだけど, だれかおせーれ.

69:デフォルトの名無しさん
02/09/04 23:21
>>68
> Windowsで, makeなんて使いモノになるの?
libtiffをVC++6で利用するためにnmakeを利用したけど、
自分でhoge.makを書く気にはならんかった。


70:デフォルトの名無しさん
02/09/05 00:06
>>68
cygwin使え。

71:68
02/09/05 01:26
>>69
やっぱりそうだよね.

>>70
cygwin使うくらいならWindowsなんて使わんよ(笑). 仕事でWin触ることはあり得ないからイイっす.

72:デフォルトの名無しさん
02/09/07 02:14
そもそもWindowsがCUIのためのOSじゃないってことなんだろうな。
だからcygwinは イイ(・∀・)!! わけで。

CUIが好きなのにWindowsを使う人はmake犬。

73:デフォルトの名無しさん
02/09/07 02:21
>>66
UNIXの欠点はすべてのコマンドがプロセス毎に独立してしまっていて
通信手段は貧弱なパイプしかない。
そこでmake, sort, grep等のコマンドをすべてクラス化してしまって
同一プロセス内で使えるようにすればもっと使いやすくなるのではと推測してみる。

74:デフォルトの名無しさん
02/09/07 02:32
疎結合から密結合へ退化ですな

75:デフォルトの名無しさん
02/09/07 02:52
UNIXは疎に過ぎる。
パイプとソケットだけではもうまともなアプリは作れないよ。
プロセス・ネット越しにオブジェクト間でお話できないとね。

76:デフォルトの名無しさん
02/09/07 02:59
あのー質問です。gnu make 使っているんですけど
make を起動した後でどこかのディレクトリに潜って(depして)
元のディレクトリの内容を変更したんですが
正しくディレクトリの変更が反映されていないみたいなんです。

元の gmake にもう一度ディレクトリ内のファイルの依存関係を
読み込ませるにはどう指示すべきでしょうか?

77:デフォルトの名無しさん
02/09/07 04:31
>>75
pipe とかの上でも、HTTP とかの protocol を使えば、お話自体はできるはずなんだけど…
誰かがそんな library 作って広めない限り、話しかけても相手にされないんだよね…
PID か何かを元に、それぞれが互いに話しかけたりできればいいんだけど…

78:デフォルトの名無しさん
02/09/07 06:53
PascalのUNIT方式ならメイクに必要な情報はソース中に書いてコンパイラが処理してくれるのに。

C使うとソースとは別にmake書かなきゃならないんで「なんでこれくらいのことやってくれないんだ」とイライラしてくる。
そのくせコンパイル速度も遅いし。


79:デフォルトの名無しさん
02/09/07 12:27
コンパイル速度と言えば、gccってpch (precompiled header)みたいなのないの?
VC++にあるけど、あれがあれば開発中にコンパイル速度に悩むことは無いと思うが。

80:デフォルトの名無しさん
02/09/07 13:24
makefileなんて小規模なのならチョイチョイっとやるだけで済むし、
大規模ならautoconf,automakeで済ませればいいから体した手間ではないと思うのだが…。


81:デフォルトの名無しさん
02/09/07 20:09
>>76
もうちょっと具体的に書いてくれないと答えられないよ。


82:デフォルトの名無しさん
02/09/07 21:58
automakeが面倒なんだが

83:デフォルトの名無しさん
02/09/10 05:00
意外とデフォルトのルールだけでうまくいったりして ...

84:デフォルトの名無しさん
02/09/10 13:02
>>83
> 意外とデフォルトのルールだけでうまくいったりして ...

ライブラリとかあると,なかなかそういうわけにはいかないよね.

85:デフォルトの名無しさん
02/09/10 20:29
検索するとautomake/autoconfサイトいっぱい出てくるんだけど
どのサイトが一番いいの?

86:デフォルトの名無しさん
02/09/10 20:31
あ、そうだ。
死のうっと。


87:デフォルトの名無しさん
02/09/10 20:36
automake win32(非cygwin)で動かしたいんだけど、互換ソフト無いですか?
シェルスクリプトみたいなので、そのままじゃ動かないですよね

88:デフォルトの名無しさん
02/09/10 21:36
>>78
> PascalのUNIT方式ならメイクに必要な情報はソース中に書いてコンパイラが処理してくれるのに。

#if 0
cc -o hoge hoge.c
exit 0;
#endif
#include <stdio.h>
int main(void) { printf("hoge\n"); }
このソースに実行権限をつけて実行するとexit以下は実行せず
かつ#がコメント化する事を利用したハック
コンパイルする場合は#if 0 で囲んであるのでコンパイラは無視する。

ツールレベルの小さなプログラムが多数ある場合、
makefileとソースの管理がウザイんでこの手を使うこともある。


89:デフォルトの名無しさん
02/09/10 23:55
>>78
PascalにUNITなんてものは規定されていない罠。


90:デフォルトの名無しさん
02/09/13 14:08
せめてデフォルトで用意されているマクロくらいは
make 間で統一されてればなーと思いませんか ?

91: ◆k/Ubp.Kg
02/09/13 14:30
>>90
あー、それは確かに思うね。普段はGNU make使ってるから気にならないけど、他のmake使うと途端に困る…w

92:デフォルトの名無しさん
02/09/13 16:40
automakeってヘッダの依存まで調べてくれるの?

93:90
02/09/13 17:09
あと, つい数日前まで恥ずかしながら知らなかったことなんですが,
Solaris 6 (7 かも) の /usr/ccs/bin/make の suffix rule って, 例えば
.c.o : rule っていう感じなんですね.
.c.o :
rule
ではだめみたい. 特定の make に依存しないように, デフォルトのマクロの挙動に
気を使って Makefile を書いてたけど, その努力は意外なところから破綻してしました ...

94:デフォルトの名無しさん
02/09/13 18:28
>>92
> automakeってヘッダの依存まで調べてくれるの?
$ gcc -M hoge.c
で出力される程度には調べてくれます。depcompが調べてくれたと思います。


95:デフォルトの名無しさん
02/09/13 20:49
ちょほいと勉強しようと思ったけど長すぎて読んでられないよ
URLリンク(www.gnu.org)
URLリンク(www.gnu.org)

96:デフォルトの名無しさん
02/09/14 09:01
>>95
> ちょほいと勉強しようと思ったけど長すぎて読んでられないよ
texinfo-4.2を使っているなら、それぞれソースを持ってきて
$ makeinfo --html auto*.texi
すると分割されるが、って、全体の長さは変わらないけどね。
GNUjdoc (URLリンク(openlab.ring.gr.jp))には日本語訳も
あるみたい。


97:デフォルトの名無しさん
02/09/14 13:09
>>75 >>77
Gnomeは単なるGUIシェルだと思ってるのか?

98:デフォルトの名無しさん
02/09/14 22:32
以下のようなディレクトリ構成の場合にちゃんとビルドするには
どうしたらいいでしょうか?gmake か MS の make か borland の make でお願いします。
一応、ディレクトリ分けしない状態ならうまくいった(ボーランドのmake)のですが…

+project
|-------makefile
|-------+bin
| |-------app.exe
|-------+obj
| |-------abc.obj
| |-------def.obj
|-------+src
| |-------abc.cpp
| |-------def.cpp
|-------+include
  |-------abc.h
  |-------def.h

●ディレクトリ分けしなかった時の makefile
CPP_FLAGS = -c -GX -GR
CPP_COMPILE = cl
LINK = link
OBJS = abc.obj def.obj
app.exe: $(OBJS)
$(LINK) $(OBJS)
.cpp.obj:
$(CPP_COMPILE) $(CPP_FLAGS) $<
.h.cpp:
よろしくお願いします。

99:デフォルトの名無しさん
02/09/14 22:38
お前ら自慢の手書きmakefileのテンプレ晒して下さい。

100:デフォルトの名無しさん
02/09/14 23:24
>>98
なんかmakefile以前の問題のような。
望むような動作をバッチファイルで書ける?

101:98
02/09/14 23:39
>>100
望む動作をバッチファイルで実現できたら make は使いませんが…
普通にコンパイルする方法を知っているのか?という意味だと受け取ったので
「それくらいわかってるよ!」という事を証明しておきます。

cl -c -GX -GR -Fo.\obj\abc.obj .\src\abc.cpp
cl -c -GX -GR -Fo.\obj\def.obj .\src\def.cpp
link -out:.\bin\app.exe .\obj\abc.obj .\obj\def.obj

これを是非 makefile にしたいです。

102:デフォルトの名無しさん
02/09/15 00:05
>>101

makefile :

bin/app.exe:
 cl -c -GX -GR -Fo.\obj\abc.obj .\src\abc.cpp
 cl -c -GX -GR -Fo.\obj\def.obj .\src\def.cpp
 link -out:.\bin\app.exe .\obj\abc.obj .\obj\def.obj

clean:
 del /s /q . > nul
 rmdir /s /q .


103:デフォルトの名無しさん
02/09/15 00:25
>>98
もっと具体的に書いてくれないとわかんないよ。

104:98
02/09/15 00:28
>>102
いやーお兄さん一本取られちゃったな。
> 望む動作をバッチファイルで実現できたら make は使いませんが…
を優先ですか、さすが!

っていうか、マジレスキボンヌです。
ちゃんと依存関係を調べて make できる makefile の書き方を教えてください。
よろしくお願いします。


105:98
02/09/15 00:31
>>103
src 内に .c や .cpp ファイルがあって、
include 内に .h があって
これらのファイルをコンパイルして
最後にリンクして、できあがったファイルを bin の中に入れたいのです。

よろしくお願いします。


106:デフォルトの名無しさん
02/09/15 01:04
>>99
#
CFLAGS = -ansi

107:デフォルトの名無しさん
02/09/15 01:07
>>105
それだけではどんな統合環境でもメイクできないのでは。
リンクしてできあがるファイルが何なのかさえわからないじゃん。

108:デフォルトの名無しさん
02/09/15 01:11
>>98
暗黙のルールに依存しないで
すべてのソースを明示的にコンパイルすりゃできるけど
そんなの面倒だから全部同じディレクトリにしとけ。
んでmake installでバイナリだけコピーすりゃいいよ。

109:98
02/09/15 01:17
>>107
いや、ファイルの種類や、取り扱いに使うコマンドはどうでもいいのです。
make の書式について知りたいのです。

とりあえず上記例でも出しているのでコマンド等は下記のように仮定してもらっても結構です。

できあがるファイルの種類 *.exe
ソースの種類 *.cpp
ソースが依存しているファイルの種類 *.h

コンパイルに使用するコマンド cl.exe
リンクに使うコマンド link.exe、

コンパイル時に常に引き渡すオプション -c -GX -GR
リンク時に常に引き渡すオプション なし

cl.exe に出力ファイルを指定する為のオプション -Fo
link.exe に出力ファイルを指定する為のオプション -out:

よろしくお願いします。

110:デフォルトの名無しさん
02/09/15 01:19
もう一声.
知りたい make の書式とはどんなやつのこと ?

111:98
02/09/15 01:19
>>108
まともなレスありがとうございます。
暗黙のルールの中にはディレクトリは指定できないという事でしょうか?

112:98
02/09/15 01:22
>>110
えっと…、「書き方」です。
.cpp ファイルが src というディレクトリ内にあって、
.h ファイルが include というディレクトリ内にあって、
.obj ファイルが obj というディレクトリ内にあるんだよ。という事を
make に教える方法というか…。

113:デフォルトの名無しさん
02/09/15 01:24
>>109
手っ取り早いのは vpath でサーチするディレクトリを追加じゃない?
bin に ふつーに Makefile を書いて vpath で include や src を追加したら
それらのディレクトリも見てくれる。
厳密にやりたいなら、スクリプトの助けがいりそう。
おいらは素人なので偉い人ならもっとスマートにできるかもしれないけど。

114:デフォルトの名無しさん
02/09/15 01:28
suffix rule はカレントディレクトリしか検索しないと思います.
で, 113 の言うとおり VPATH で指定すればいいんですけど,
お使いの make にその機能はありますか ?

115:98
02/09/15 01:29
CPP_FLAGS = -c -GX -GR
CPP_COMPILE = cl
LINK = link
>>110
ちなみに、下記は擬似例ですが、雰囲気は伝わるでしょうか?
. が拡張子の意味とカレントディレクトリの意味でかぶっていて見づらいとは思うのですが
>>98, >>112 とあわせて見てもらえると、私が何を求めているのか
理解して頂けるような気がするのですが…

OBJS = ./obj/abc.obj ./obj/def.obj
./bin/app.exe: $(OBJS)
  $(LINK) $(OBJS)
./src/.cpp ./obj/.obj:
$(CPP_COMPILE) $(CPP_FLAGS) -fo ./obj/$<.obj ./src/$<
./include/.h ./src/.cpp:

116:98
02/09/15 01:32
失礼しました、上の方に謎な文がくっついてしまいました。
# Mozilla 1.0 ってちょっとバギーですよね…。
# .9.x の頃のがしっかりしてたな…。

>>113-114
無学なもので vpath という物を知らないのですが、
独立したコマンドでしょうか? make のオプションでしょうか?

117:113
02/09/15 01:33
>>113
具体的に言うと shell でディレクトリに潜って ls でリストを変数にいれて
addprefix で bin/ なり src/ なり include/ obj/ なりを付け加えて
それを Makefile.hogera で出力して $(MAKE) -f Makefile.hogera
ってする。

118:113
02/09/15 01:34
>>116
GNU Make にあるコマンド。addprefix もそう。

119:98
02/09/15 01:36
>>117
なるほど、そういう技巧を使わないとできないんですね。
>>108 さんの方法でお茶を濁そうかと思います。

みなさんありがとうございました。

120:113
02/09/15 01:51
別に技巧ってほどのものじゃないしスマートじゃないけどね…。
やっぱ偉い人がツッコミいれてくれないとイマイチだな…。

121:デフォルトの名無しさん
02/09/15 02:01
make自体スマートじゃないからどうしようもない。
それに凝ったmakefile書く奴ってく非生産的なのが多いので
makefileはシンプルに。つかVC使えよ。

122:デフォルトの名無しさん
02/09/15 02:03
VC厨までが出てきたか もう寝るよ

123:デフォルトの名無しさん
02/09/15 02:21
↑もう起きて来なくていいよ。

124:デフォルトの名無しさん
02/09/15 02:39
>>120
低レベルなム板で頑張っても無意味。unix板に帰ろう。

125:
02/09/15 05:40
>>98
こんなところだろう。

SRCDIR=src
OBJDIR=obj
INCDIR=include
BINDIR=bin
DIRS=$(OBJDIR) $(BINDIR)
CPP_COMPILE=cl
CPP_FLAGS=-c -GX -GR -Fo$(OBJDIR)\ -I$(INCDIR)
LINK=link
LINK_FLAGS=
OBJS=$(OBJDIR)\abc.obj $(OBJDIR)\def.obj
TARGET=$(BINDIR)\app.exe

all: $(DIRS) $(TARGET)

$(DIRS):
    @if not exist $@\nul mkdir $@

$(TARGET): $(OBJS)
    $(LINK) -out:$@ $(LINK_FLAGS) $(OBJS)

{$(SRCDIR)\}.cpp{$(OBJDIR)\}.obj:
    $(CPP_COMPILE) $(CPP_FLAGS) -c $<

$(OBJDIR)\abc.obj: $(INCDIR)\abc.h
$(OBJDIR)\def.obj: $(INCDIR)\def.h

126:デフォルトの名無しさん
02/09/15 06:33
>>125
>$(LINK) -out:$@ $(LINK_FLAGS) $(OBJS)
-out:が思いっきり依存しちゃってるので、CPP_COMPILEとか定義する意味がない

>$(OBJDIR)\abc.obj: $(INCDIR)\abc.h
>$(OBJDIR)\def.obj: $(INCDIR)\def.h
これがかなりイマイチと感じる。

127:デフォルトの名無しさん
02/09/15 12:04
>>125
その Makefile まともに動かないような気がするんですが,
MS か Borland の make ではちゃんと動くんですか ?
GNU make では意図したとおりに動かないですよねえ ...
気のせいかな.

128:デフォルトの名無しさん
02/09/15 14:33
ほれ。検証しとらんがこんなもんだろ。gmake 版ね。

BINDIR = bin
OBJDIR = obj
SRCDIR = src
INCDIR = include

COMPILER = cl

TARGET = $(BINDIR)/app.exe
OBJS = $(addprefix $(OBJDIR)/, abc.obj def.obj)

all: $(TARGET)

$(TARGET): $(OBJS)
<TAB> $(COMPILER) $(LDFLAGS) $^ -o $@

$(OBJDIR)/%.obj: $(SRCDIR)/%.cpp
<TAB> $(COMPILER) $(CFLAGS) -c $< -o $@

129:デフォルトの名無しさん
02/09/15 15:07
>>128
検証しました。
makefile 的にはあっている模様ですが、当方の cl.exe (VC6SP5)が

-c オプション(コンパイルオンリー) を指定した場合、
-o でディレクトリを指定しても無視されて、全部カレントに吐き出す為
だめぽになっています。

あと
TOUCH = touch

$(SRCDIR)/%.cpp: $(INCDIR)/%.h
<タブ> $(TOUCH) $@
は書き忘れでしょうかね。

130:デフォルトの名無しさん
02/09/15 15:24
なるほど pattern rule は suffix rule と違って, ディレクトリ指定が
できるのがいいですね. いままで使用する make にかなり依存するので避けてたんですが.

ちなみに Linux の GNU make, Solaris の make では OK,
IRIX, FreeBSD の make ではだめでした.

131:129
02/09/15 15:28
ちゃうわ、cl.exe の出力ファイル指定オプションは -Fo やった。
これで VC + gmake 使いの皆さんはハッピーになれますか?

BINDIR = bin
OBJDIR = obj
SRCDIR = src
INCDIR = include

COMPILER = cl
TOUCH = touch

TARGET = $(BINDIR)/app.exe
OBJS = $(addprefix $(OBJDIR)/, abc.obj def.obj)

all: $(TARGET)

$(TARGET): $(OBJS)
<豚>$(COMPILER) $(LDFLAGS) $^ -o $@

$(OBJDIR)/%.obj: $(SRCDIR)/%.cpp
<豚>$(COMPILER) $(CFLAGS) -c $< -Fo./$@

$(SRCDIR)/%.cpp: $(INCDIR)/%.h
<豚>$(TOUCH) $@

132:デフォルトの名無しさん
02/09/15 15:36
>>130
> IRIX, FreeBSD の make ではだめでした.
gmake は入ってませんか? なけりゃインストールしちゃいましょう。
わたしゃ、もう、gmake 以外は使えない体になってしまいますた。

>>131
> $(SRCDIR)/%.cpp: $(INCDIR)/%.h
> <豚>$(TOUCH) $@
あまり見かけないやりかたですね。cl には gcc の -M オプションみたいのは
ないのかな?

133:デフォルトの名無しさん
02/09/15 15:54
makedepend.exe っつーのが存在するようですね。
URLリンク(www.google.com)

134:デフォルトの名無しさん
02/09/15 21:12
cygwin を使っているのですが、makefile 中で
  cd Dir
  pwd

と書いたとき、pwd が Dir に移動していない時のディレクトリを返してきます。
これは通常動作なのでしょうか?


135:デフォルトの名無しさん
02/09/15 21:17
通常動作。各行は、(おそらく) system によって実行されている。

136:デフォルトの名無しさん
02/09/15 21:20
通常動作です.

make は 1 行ごとにコマンド行を解釈して shell を呼び出すような
動作をします.

hoge : fuga
<tab>cd Dir; \
<tab>pwd

でお望みの動作が得られると思います.

137:134
02/09/15 22:37
>>135-136
なるほど、各行で独立して実行されるイメージなのですね。
ありがとうございました。

138:デフォルトの名無しさん
02/09/16 03:32
Makefile中でヒアドキュメントを使えますか?
cat <<EOF
any message
EOF
ってのをMakefileでやりたいのですが、tabをいれたりとかいろいろやってもうまくいきませんでした。
1行ずつechoするしかないんでしょうか。

139:デフォルトの名無しさん
02/09/16 04:06
\

140:デフォルトの名無しさん
02/09/16 05:39
>>139
それがうまくいかないんです。多分使い方が間違っていると思うんですけど。

target:
[TAB]cat <<EOF \
[TAB] hoge hoge \
[TAB]EOF

target:
[TAB]cat <<EOF
[TAB] hoge hoge \
[TAB]EOF

こんなのは試しました。

141:デフォルトの名無しさん
02/09/16 05:46
depend:
makedepend -- $(FLAGS) -- $(ALL_C_FILES)

142:デフォルトの名無しさん
02/09/16 10:10
ヒアドキュメントはあまり使わないので詳しくないのですが.
もし sh 上で 1 行でヒアドキュメントが使えれば, make でも使えるかも
しれません ... が, 私にはできないように思います.


143:デフォルトの名無しさん
02/09/16 18:10
<<EOFが不要なんじゃ

target:
[TAB]cat \
[TAB] hoge hoge


144:
02/09/16 19:03
>>143
here documentって知ってる?

145:デフォルトの名無しさん
02/09/18 12:30
>>140
\ → ;\
は試した?

146:138
02/09/20 02:59
>>145
返事が遅れてゴメンなさい。

all:
[TAB]cat <<EOF;\
[TAB]hoge hoge \
[TAB]EOF
として試してみましたが、
/bin/sh: hoge: command not found
と出ました。

# 仕方無いのでechoで頑張りますた。


147:デフォルトの名無しさん
02/10/22 21:22
Eiffel イイ!!

148:デフォルトの名無しさん
02/10/22 21:43
あげちゃったわけでつか。
あげちゃったわけでつか。
あげちゃったわけでつか。
あげちゃったわけでつか。
あげちゃったわけでつか。
あげちゃったわけでつか。
あげちゃったわけでつか。
あげちゃったわけでつか。








                                      氏ねよ、クソが。

149:デフォルトの名無しさん
02/10/22 21:56
>>1
ant

150:デフォルトの名無しさん
02/10/23 16:26
下のコメントのようなことがしたくて悩んでいるんですが、
どうすればいいでしょうか? お知恵を貸してください

DATAFILES1 = a.dat b.dat
DATAFILES2 = c.dat d.dat
OFILES = $(DATAFILES1:.dat=.o) $(DATAFILES2:.dat=.o)

%.o : %.dat
# DATAFILE1のファイルは, objcopy -XXXX $< $@
# DATAFILE2のファイルは, objcopy -YYYY $< $@


151:デフォルトの名無しさん
02/10/23 17:36
OFILES1 = $(DATAFILES1:.dat=.o)
OFILES2 = $(DATAFILES2:.dat=.o)
# DATAFILE1のファイルは, objcopy -XXXX $< $@
$(OFILES1): %.o : %.dat
objcopy -XXXX $< $@
# DATAFILE2のファイルは, objcopy -YYYY $< $@
$(OFILES2): %.o : %.dat
objcopy -YYYY $< $@

152:150
02/10/23 19:52
>>151
そんな記述ができるんですね。
すごく勉強になります。

ありがとうございます。


153:デフォルトの名無しさん
02/10/24 04:43
>>151
それ知らなかった。info make見ても見つけられなかったんだが、どこに書い
てある?


154:デフォルトの名無しさん
02/10/24 10:10
static pattern rules のところに書いて歩けど。

155:デフォルトの名無しさん
02/10/24 10:11
あ、もちろん GNU Make の話ね。

156:デフォルトの名無しさん
02/10/24 11:42
>>154
ほんとだ。tnx
ふしあなさんだったよ。

157:デフォルトの名無しさん
02/11/05 00:28
HSP使えばいいのに

158:デフォルトの名無しさん
02/11/12 11:43
VB のためなら死ねる!!

159:デフォルトの名無しさん
02/11/22 20:59
static pattern rules のところに書いて歩けど。

160:みな
02/11/25 15:20
■『C と C++ とが混在した Makefile で makedepend を使うには?』[1/2]

初めまして。宜しく御願い致します。
まず,私は Makefile に関してはかなり未熟者のレベルです。
必要に応じてウェブ上で検索しては知識を付けている段階です。

さて,止むを得ない事情で,
*.h *.c *.cpp という,C と C++ とが混在した Makefile でプログラム開発中です。
makedepend を導入したいと思い,
ウェブ上で検索した幾つかの入門ページを参考にしつつ,―

TOP = /usr/local/test
INCDIR = $(TOP)/../common/include -I$(TOP)/include
SRCS = aaa.c bbb.c
SRCSXX = xxx.cpp yyy.cpp
OBJS = $(SRCS:.c=.o)
OBJSXX = $(SRCSXX:.cpp=.o)
CFLAGS = -O3 -Wa,-al -fno-common -G0
CXXFLAGS = -O3 -Wall -Werror -Wa,-al -fno-exceptions -fno-common -G0 -ansi
.SUFFIXES: .o .s .dsm .c .cc .cpp
depend:
makedepend -I$(INCDIR) -- $(CFLAGS) -- $(SRCS) 2>/dev/null
makedepend -a -I$(INCDIR) -- $(CXXFLAGS2) -- $(SRCSXX) 2>/dev/null

―(一部抜粋 & ファイル名は例示用)の様に Makefile を書き直し,
途中までは意外と(?)順調に導入が進んだのですが…。

(▼ >>161 に続く…… ▼)

161:デフォルトの名無しさん
02/11/25 15:21
make!

162:みな
02/11/25 15:28
■『C と C++ とが混在した Makefile で makedepend を使うには?』[2/2]

(▲ …… >>160 からの続き ▲)
(※ 先に >>161 に割り込まれてしまいました…。スミマセン…。)

やっと,導入完了と思って make depend と実行してみたところ,
Makefile 中には―
# DO NOT DELETE
aaa.o: def4c.h aaa.h
bbb.o: def4c.h bbb.h
xxx.c.o: def4cpp.h xxx.h
yyy.c.o: def4cpp.h yyy.h
―の様に自動生成されてしまいました。
勿論,正しくは―
# DO NOT DELETE
aaa.o: def4c.h aaa.h
bbb.o: def4c.h bbb.h
xxx.o: def4cpp.h xxx.h
yyy.o: def4cpp.h yyy.h
―となって欲しいところなのですが,
ウェブ上で検索して出てくる典型的なサンプルは *.c しか前提にしてない様で,
一体どうやれば良いのかさっぱりわかりません。
もしかして,makedepend 自体が C++ には対応してないのでしょうか…?

どうぞ御教授下さい。
正解そのものが無理なら,より適切な調べ方(検索方法)だけでも,御願い致します。

※ 以上で情報不足の場合は,
  例えば Makefile の一部抜粋等々,今後追加書き込み致します。

163:デフォルトの名無しさん
02/11/25 16:48
使ってる makedepend が腐ってるんじゃないのかなぁ?
1) 新しいやつをインストールしてみるか
2) gcc/g++ -MM オブションを使うか
3) | sed -e 's/\.c\.o/\.o/' をかますか
してみては。

164:みな
02/11/25 17:59
>>163 さん,早速レス有り難う御座います。
周りの人に訊いても,自力で色々検索しても,サッパリわかんなかったんで,
こうして何かレス頂けると,ホント嬉しいです。

makedepend が腐ってるっスか…。う~ん…。
man 見ても,makedepend のバージョン表示する為のオプションって
見当たらないですよねぇ。(困)

えぇと…,取り敢えず「3) | sed -e 's/\.c\.o/\.o/' をかます」って,
具体的にどこにどう記述すればいいんでしょうか?

165:かなり適当
02/11/25 18:33
>>160
> .SUFFIXES: .o .s .dsm .c .cc .cpp
この行消してみるとどうなる?

166:みな
02/11/25 19:04
「かなり適当」こと >>165 さん,只今やってみましたが―
―やっぱりダメでした…。
自動生成内容に,何も変化は起こりませんでした。
そういえば,自分で試行錯誤してた際も,この行を色々と書き換えてみたけど,
結果に何等変化が無かった記憶が…。

てゆーか,そもそもこの行,そんなに必要な行なんですかねぇ…??
一応,サンプルなぞを真似つつ,取り敢えず付けてあるだけな感じなんですけど。
仮に全く無くしたりすると,具体的にどんな不都合が…?

167:163
02/11/25 19:14
そうか、makedepend って、Makefile を直接書き換えちゃうのか。
とすると、makedepend をした後に、
sed -e 's/\.c\.o/\.o/' Makefile > Makefile.new
mv Makefile Makefile.bak
mv Makefile.new Makefile
とかやってみては。
ちなみに、オレだったら、GNUMakeが前提だけど
depend:
makedepend -fdepend.mf -I$(INCDIR) -- $(CFLAGS) -- $(SRCS)
makedepend -f- -I$(INCDIR) -- $(CXXFLAGS2) -- $(SRCSXX) | sed 's/\.c\.o/\.o/' >> depend.mf

-include depend.mf

とやるかな。つまり、依存関係は別ファイルに書き出して、それを
Makefile にインクルードさせる。

168:みな
02/11/25 19:40
度々アドバイス有り難う御座います。> >>163(= >>167)さん
いや,>>163 で書いてあった「3)」の,(パイプで)「かます」っていうのが,
Makefile 中のどこにどんな風に記述したらいいのか謎だったんです。

取り敢えず,>>167 前半のやり方で,一応目的の内容の Makefile は得られますね。
もしかしたら,もっとスマートなやり方が有るのかも知れませんけど。
(コマンドライン複数行分を何等かのスクリプトファイルにしちゃうとか…?)

>>167 後半のやり方は,今から早速勉強させて頂きます。
某 Visual 何たらの統合環境の“全自動”に甘やかされて育つと,
いざという時に弱々だなーと,思い知らされてるトコでして…。

今回は,色々と教えて下さって,有り難う御座います。
もしかしたら,今後また別件でマヌケな質問してしまうかも知れませんけど。(汗)

169:デフォルトの名無しさん
02/11/26 12:25
普通のmakeだったら.dependってファイルに依存関係吐き出しとけば
勝手に読み込んだりしないかな?FreeBSDのmakeはそうだったけど。

.dependをつくるmkdepなんてコマンドもある。
-aオプションをつけると追加書き込みもしてくれるみたい。

170:デフォルトの名無しさん
02/11/26 14:17
どこのmakedependだか知らないけど、Xに付いてるやつなら、
大昔からC++には対応しているはずだけどなあ。
どうせそんなmakedependなら、sedで逃げても、まともに
C++の構文読んでくれなかったり、__cplusplusが定義されて
いなかったりするんじゃないのか?
まともなmakedepend入れた方がいいよ。
gccmakedepなら-MMとか使えるし。

171:名無しさん@カラアゲうまうま
02/11/26 14:30
>>169
たぶん*BSD固有。

172:みな
02/11/26 17:15
>>170 さん
gccmakedep なんて在ったんですね。知りませんでした…。
で,>>160 の makedepend を単に gccmakedep に置換してみたところ,
あっさり,*.c.o の問題は解決しました!
まずは,有り難う御座います。> >>170 さん

ところが,別の問題が…。
makedepend の生成してくれた依存関係は,
ホントに漏れ無く書き出してある感じだったんですけど,
gccmakedep の生成してくれる依存関係は,
パッと見ただけで,明らかに不足気味なんですよ。

例えば,何十個も在るソースファイル中に,
test1.cpp test2.cpp test3.cpp というのが在ったとすると,
当然,test1.o test2.o test3.o それぞれに
依存関係の在るヘッダファイル *.h を書き出してあるべきですけど,
gccmakedep の生成する依存関係って,
例えば test1.o と test3.o とに関しては書き出してあっても
なぜか test2.o に関しては何も書き出してなかったりとか。
勿論,test2.cpp から何も #include してないなんて事はありません。

う~ん,まさに一難去ってまた一難。

173:デフォルトの名無しさん
02/11/26 22:17
ifdefの関係でincludeされないようになっているとか。
-DXXXは基本的にコンパイル時と同じように設定しないとダメ。
あと、インクルードパスが通っていないのかも。多分C++の
標準インクルードパス(/usr/include/g++とか)は自分で追加
する必要があると思う。
それでダメなら、根本的に環境がおかしいのかなあ。gccmakedep
が入っているからにはXが入っているんだろうけど、X11R5だったり、
gccがegcsよりさらに昔のだったりしないか?あるいは、gcc向け
でなく、別のコンパイラ向けにソースを書いているのに、gccmakedep
を使おうとしているとか。

174:みな
02/11/27 13:46
>>173 さん

前半で御指摘の「includeされない」「パスが通っていない」云々は,
まず無いと思うのですけど…。
理由は,>>172 に書いた通り,
>>160 の makedepend を単に gccmakedep に置換してみた」だけだからです。
つまり,makedepend の方を使えば,当初の謎だった「*.c.o の問題」以外は,
全てうまくいってました。
また,もし #ifdef がらみで #include されてなかったとすると,
宣言無しで暗黙に使おうとした云々と,コンパイル時にエラーが出ると思います。

やはり後半で御指摘の「根本的に環境がおかしい」んですかねぇ…。(困)
OS は RedHatLinux 7.1,コンパイラは GNUC 2.96(= GNUC++ 2.96),
makedepend も gccmakedep も /usr/X11R6/bin/ というパスに在ります。

175:デフォルトの名無しさん
02/11/27 17:49
じゃあ、処理速度は遅くなるけど、gcc/g++ の -M(または-MM)オプションを
使ってみたらどうかな。こいつは依存関係を標準出力に出すので、
リダイレクトしてファイルに落とす。そして、>>167 みたいに
-include でインクルードしてやればよい。Linux ということは gmake を
使ってるわけだよね?

176:デフォルトの名無しさん
02/11/27 18:03
>>174
> やはり後半で御指摘の「根本的に環境がおかしい」んですかねぇ…。(困)
> OS は RedHatLinux 7.1,コンパイラは GNUC 2.96(= GNUC++ 2.96),
> makedepend も gccmakedep も /usr/X11R6/bin/ というパスに在ります。

rpm -qf /usr/X11R6/bin/{makedepend,gccmakedep}
の結果は?

177:みな
02/11/27 18:39
>>175 さん
私も,>>167 さんが後半で書かれてた方法が一番良さそうに思えたんで,
gcc の man とか色んな関連ウェブページとか見ながら,習得中です。
(スミマセン。発展途上なもんでして…。)
ちなみに,make も gmake も /usr/bin/ というパスに在って,
使ってるのは一応 gmake の方なんですけど,試しに make の方に変えてみても,
(少なくとも気付いた範囲内では)結果は何も変わらない様です。

>>176 さん
rpm -qf /usr/X11R6/bin/{makedepend,gccmakedep} してみたら,―
XFree86-devel-4.0.3-5
XFree86-devel-4.0.3-5
―と出てきました。
ゴメンナサイ。rpm というモノ自体,>>176 を読んで今初めて知った次第で…。(汗
なるほど,「rpm is a powerful package manager」ですか。
でも,その前に使う人が powerful に成長しないと,宝の持ち腐れですね…。(自嘲

178:176
02/11/27 19:04
>>177
> XFree86-devel-4.0.3-5
もう4.2.1とか出てるのでバージョンを上げてみては。
全部上げるのがいやなら、

rpm -Uvh --excludepath /usr/X11R6/lib --excludepath /usr/X11R6/include \
--excludepath /usr/X11R6/man ${XFree86develRPM}

とか、

cd /
rpm2cpio ${XFree86develRPM} | cpio -i usr/X11R6/bin/{makedepend,gccmakedep}

とか。

179:デフォルトの名無しさん
02/11/28 00:42
URLリンク(happysize.com)
↑こんなんもあるぜ。
漏れはソースを俺様カスタマイズしてつかってるぜ。

180:みな
02/11/28 14:08
>>178 さん

[mina@localhost mina]$ rpm -Uvh --excludepath /usr/X11R6/lib --excludepath /usr/X11R6/include --excludepath /usr/X11R6/man ${XFree86develRPM}
rpm: インストールのためのパッケージがありません
[mina@localhost mina]$ cd /
[mina@localhost /]$ rpm2cpio ${XFree86develRPM} | cpio -i usr/X11R6/bin/{makedepend,gccmakedep}
error: read failed: Success (0)
error reading header from package
cpio: premature end of archive
[mina@localhost /]$
―な感じでした。だめぽ…?

いや,そもそもシス管に訊けとかインストールした人に頼めとか,
心中でツッコみながら私の書き込み読んでる方々も少なくないと思うんですけど,
この環境構築した人自体が,雑誌とか入門書とかと首っ引きで何とか構築したとゆー,
ある意味“発展途上”な人なもんで…。(勿論,私よりは“上”ですけど。)
>>164 で「周りの人に訊いても―(中略)―サッパリわかんなかったんで」
と書いたのは,そんな訳だったんです。(類は友を呼ぶ…?)

181:みな
02/11/28 14:08
>>179 さん

あっ,その "autodep" って,色々 Google 検索してた中で見た記憶が…。
リンク先あちこち紫色になってるし。

コレって,一企業(株式会社ハッピーサイズ)が御厚意で無償提供して下さってる,
一フリーソフトですよね?
ですから,あまり標準的・一般的じゃないユニークなモノに
最初っから頼りきっちゃうと,後々何かマズいかなーとか,
(折角習熟してもツブシが利かないとか…?)
何と無く思ってしまって,初めて見た時はそのまま流してしまってました。

やっぱ,いいですか。"autodep"。
後でダウンロードして,ちょっと試してみますね。
情報,有り難う御座います。

182:176
02/11/28 14:42
>>180
> [mina@localhost mina]$ rpm -Uvh --excludepath /usr/X11R6/lib --excludepath /usr/X11R6/include --excludepath /usr/X11R6/man ${XFree86develRPM}
> rpm: インストールのためのパッケージがありません
> [mina@localhost mina]$ cd /
> [mina@localhost /]$ rpm2cpio ${XFree86develRPM} | cpio -i usr/X11R6/bin/{makedepend,gccmakedep}
> error: read failed: Success (0)
> error reading header from package
> cpio: premature end of archive

${XFree86develRPM}はDLしてきたXFree86-develのRPMパッケージのパス名。

(余裕ができたら)UNIX関連の入門書を嫁。

183:デフォルトの名無しさん
02/12/03 20:14
gcc -MMしろ

184:デフォルトの名無しさん
02/12/08 02:46


185:デフォルトの名無しさん
02/12/08 02:47


186:デフォルトの名無しさん
02/12/10 16:07
下のように、複数のターゲットがある依存関係でコマンドに引数が必要な場合
どう記述したらよいのでしょうか?

$(AFILES) file1.a file2.a file3.a
$(BFILES) $(AFILES:.a=.b)
$(CFILES) $(AFILES:.a=.c)

%.b %.c : %.a
$(CMD) -o1 file1.b -o2 file1.c file1.a
$(CMD) -o1 file2.b -o2 file2.c file2.a



187:デフォルトの名無しさん
02/12/10 16:10
>>1
中身はまだ読んでないけど、スレタイ気に入った。w

188:186
02/12/10 16:11
書き忘れましたが、GnuMakeです。

189:デフォルトの名無しさん
02/12/10 16:12
  .,,
   \ヽ--___
    \   丶---ヽ___
     .゙\ ク     ~~>     クソスレに認定されました
      \   ソ   /
       .\     ノ
         \  /
          .\/
           .\
            \
             .\
              ,,\
              .″ ゙》
            __., イ,, 》li,_
          ill! i;l;lllllz,lll;lllllll;lllllly
          .:llllllll;llllllllllll;;ll;||llllllllll}
          .il||l|lllllllllllllll|《lllll|lly《アlz     .、  zz,、
          ._ノレ;llllllll|;llllllliilllllllllllllllllllllyuyll;ミミ″ .''゙゙∨
         」lllllllllllllllllllllllllllllllllllllllllll   ゙巛,厶yyv》llll!
        {lllllllll厂lllllllll|》lllllllllllllllly、   ,illllllllllllllllli;;ll|y         .、.,,_
        《;|《llllll;lllli;llllllll;|lllllllllllllllllll|lli. .zllllllll;《lll|《lllllllllllllllizy,lllz.  _yyyyr|》
,u,,_       .rlllllllllllllllllllllllllllllll厂リllllリlll!,」llllll「リll;lllllll;;llllllllllllllllllll;||lllllllllllllll;lllllllll
l;lll;l;yu.,,lllz:.;..:villlllllllllllllllllll|》llllllll| uilllll|illlllノ|ll|゙」zyllllll;ll|;lllllllllll;l|リllllllllllll;llllllllllllllllllll
lll|!illlllllllll|ll|i;llllllllllllllllllllllllllllilllllllllllllllllllllllllllllll|lllll|,|lllllllllllllll|》;ll《|「.vuilllll|《liiilll|フ《llllllll
lllllllllllllllllllllllll|《lllllllllll;;llllllllllllllll;llllllllllllllllllllll|)|《;lllllllllllllllllllllllllllllllll;lll;lllll;》([;lllllllllllllllllll

190:デフォルトの名無しさん
02/12/10 17:46
>>186
マルチかよ!

191:デフォルトの名無しさん
03/01/08 18:42
make makes me mad.

192:IP記録実験
03/01/08 21:19
IP記録実験
スレリンク(accuse板)

1 名前:ひろゆき ◆3SHRUNYAXA @どうやら管理人 ★ 投稿日:03/01/08 17:13 ID:???
そんなわけで、qbサーバでIPの記録実験をはじめましたー。

27 名前:心得をよく読みましょう 投稿日:03/01/08 17:20 ID:yL/kYdMc
SETTING.TXT管轄でないということは全鯖導入を視野に、か?

38 名前:ひろゆき ◆3SHRUNYAXA 投稿日:03/01/08 17:22 ID:rLfxQ17l
>>27
鋭いです。

73 名前:ひろゆき ◆3SHRUNYAXA 投稿日:03/01/08 17:27 ID:rLfxQ17l
>ところで、IPが抜かれて何か今までと変わることってあるのでしょうか?
・今までより、サーバが重くなる。
・裁判所や警察からの照会があった場合にはIPを提出することがある。

193:デフォルトの名無しさん
03/01/09 02:44
>>598
訴えられても「誣告ですよ」と返せる様にソース固めて叩きゃ良いじゃん。
荒らさなきゃ良いじゃん。

194:デフォルトの名無しさん
03/01/09 03:27
スレリンク(accuse板:114-119番)

/ヽァ/ヽァ

195:デフォルトの名無しさん
03/01/09 04:09
>>373
ありがと

196:デフォルトの名無しさん
03/01/09 13:40
職場、学校、座敷牢から気兼ねなく書き込みでける
ってゆってたのにー
プンスカ!!

197:デフォルトの名無しさん
03/01/09 14:50
最高裁への上告は認められなくなったから、これで事実上判決確定だよ。
逆転も何もないって。          
勢いで上告なんかしても一発で上告却下(門前払い)だよ。
   
二審も一審を支持。これに対して上告しようにも、
刑事訴訟と同様、自由に上告できるってもんでもないのです。
民事訴訟法312条 (上告の理由) 1項
「上告は、判決に憲法の解釈の誤りがあること
その他憲法の違反があることを理由とするときに、することができる。」
URLリンク(www.m-net.ne.jp)
  
ようするに上告しても今の制度では100%無駄。 これで完全終了ってことか。


198:デフォルトの名無しさん
03/01/09 17:32
======2==C==H======================================================

         2ちゃんねるのお勧めな話題と
     ネットでの面白い出来事を配送したいと思ってます。。。

===============================読者数: 138720人 発行日:2003/1/9

年末年始ボケがそろそろ収まり始めた今日このごろのひろゆきです。

そんなわけで、年末に予告したIP記録ですが実験を開始しています。

「2ちゃんねる20030107」
こんな感じで各掲示板の最下部に日付が入ってるんですが、
20030107以降になってるところはログ記録実験中ですー。

んじゃ!

────────────Age2ch─
■この書き込みは、Age2chを使って配信されています。
──────────────
Keep your thread alive !
スレリンク(software板)l50
──────────────

199:デフォルトの名無しさん
03/01/09 23:22
>736
らしいね

ID:WcTtLBwB
も少しまとめてレスする癖付けれ

200:デフォルトの名無しさん
03/01/10 01:11
マンコとかきまくれるのは2chだけ!!ということに変わりはない

201:デフォルトの名無しさん
03/01/10 09:47
色々、俺を過大評価してる様ですが
(現時点で全世界規模のインテリ層に私がシンパいるとか 笑 ありえないって。)
俺一人で突き進む事が基本なんですが(てか十分。命だけ足りないけど。)

そういった事は、貴方方には大きいけど俺には小さいです。
「人生」ってありますね。
私が直接的な報復手段を選ばずに我慢したのもそういった理性があるからです。
「目先で」シャレにならない、からです。
大体察しているでしょう。

では5分後か昼に掛けます。

202:デフォルトの名無しさん
03/01/10 10:58
メルマガまだ?

203:デフォルトの名無しさん
03/01/10 11:43
最高裁への上告は認められなくなったから、これで事実上判決確定だよ。
逆転も何もないって。
勢いで上告なんかしても一発で上告却下(門前払い)だよ。

二審も一審を支持。これに対して上告しようにも、
刑事訴訟と同様、自由に上告できるってもんでもないのです。
民事訴訟法312条 (上告の理由) 1項
「上告は、判決に憲法の解釈の誤りがあること
その他憲法の違反があることを理由とするときに、することができる。」
URLリンク(www.m-net.ne.jp)

ようするに上告しても今の制度では100%無駄。
これで完全終了ってことか。


204:デフォルトの名無しさん
03/01/10 12:12
(;´(Å)`) <・・・。

205:デフォルトの名無しさん
03/01/10 13:03
電気店のパソコン売り場から2ちゃんにカキコする奴が増えるんだろうなあ

206:デフォルトの名無しさん
03/01/10 15:26
(・∀・)クスクス

207:デフォルトの名無しさん
03/01/10 16:53

何が変わるんですか。

208:デフォルトの名無しさん
03/01/10 23:15
>書き込みの質があがるんでつか
質の低い書きこみが減って、結果的に質の平均があがるのではないかと、、、


209:デフォルトの名無しさん
03/01/10 23:20
>>704

「おはよう一直線」という番組で、生島ヒロシのでるやつ。
 URLリンク(www.tbs.co.jp)
宮崎哲「2chでは嘘のことをネタというんですけどね、これはネタですね」
「あまり真に受けて騒ぐのもどうか」とも、

おまえらのスポンサーは真に受けてひろゆきに6億円も損害賠償請求して
るじゃん。とか思ったわけだけど

210:デフォルトの名無しさん
03/01/11 00:38
実験

211:デフォルトの名無しさん
03/01/11 00:46
我ながら好き勝手にほざいてしまいますた・・(汗
もし実現しても回線細そうですしね。。。



212:デフォルトの名無しさん
03/01/11 10:07
公人と私人の違いってやつ
俺は嫌いだけどねこの分け方

213:デフォルトの名無しさん
03/01/11 10:40
======2==C==H======================================================

         2ちゃんねるのお勧めな話題と
     ネットでの面白い出来事を配送したいと思ってます。。。

===============================読者数: 139038人 発行日:2003/1/10

なにやら、連日メルマガだしてるひろゆきです。

そんなわけで、ログ記録実験ですが、いちいちサーバ指定するのが面倒なので、
全部のサーバに入れてみました。

重くなって落ちたりしてもご愛嬌ってことで。。。

んじゃ!

────────────Age2ch─
■この書き込みは、Age2chを使って配信されています。
──────────────
Keep your thread alive !
スレリンク(software板)l50
──────────────

214:デフォルトの名無しさん
03/01/11 11:33
ひろゆきが嫌韓に否定的なのを忘れているようで。
IPを総連に売られたら、どうなると思う?

215:デフォルトの名無しさん
03/01/11 12:07
死ねよ馬鹿ども


216:デフォルトの名無しさん
03/01/11 13:08
まぁお前、素人は無難な書き込みしてなさいってこった。

217:デフォルトの名無しさん
03/01/11 13:38
人生をゲームにしちまったひろゆきはオレより3倍バカ
バカになりきるのは(人間として)難しい

218:デフォルトの名無しさん
03/01/11 16:23
2ちゃん閉鎖したら、他のインターネット掲示板が荒れたり、DQNな事件が増える

219:デフォルトの名無しさん
03/01/11 16:30
逆に立てて欲しくなかったんだが(w

220:デフォルトの名無しさん
03/01/12 00:32
おう、おめーら。
まあな、今年は俺の年なわけだがどうよ?
っていうかなぁ、俺の毛毟り取るのはまあ、許してやるよ。
メシくわせてもらってるからな。
でもな、紙とか食わせるのはマジで勘弁してくれよ。
俺ァな、山羊じゃねぇんだよ。
あんなひつじの出来そこないと一緒にしないでくれよ。
だって山羊だぜ、山羊。
俺なんか十二星座ってだけじゃなくて干支でもあるんだよな。
だけど、山羊見ろよ、山羊。
黄金聖闘士(ゴールドセイント)止まりだぜ?
あんなのと一緒にしてもらいたかぁーねーよな。
っていうか、俺を殺せるもんならやってみろよ。
俺はいつどこでも誰の挑戦でも受けるぞ?


221:デフォルトの名無しさん
03/01/12 00:43
日本人・日本在住・男・童貞
ここまではIPから特定しますた。

222:デフォルトの名無しさん
03/01/12 10:51
ななも殺人教唆で逮(ry


223:デフォルトの名無しさん
03/01/12 10:53
どこがどう恥ずかしいんだい?
それを説明しないお前は説得力ゼロだが。
加えて君の無能さも証明しているな。

224:デフォルトの名無しさん
03/01/12 21:26
それは単に業者への制裁措置じゃ?

225:デフォルトの名無しさん
03/01/12 21:29
通ることもあるわな。

「見なかった」といわれて終わるのは証明の問題であって実体の問題ではない。

226:デフォルトの名無しさん
03/01/12 21:40
あった

227:山崎渉
03/01/13 19:01
(^^)

228:デフォルトの名無しさん
03/01/13 23:31
ワラタ

229:山崎渉
03/01/15 18:14
(^^)

230:山崎渉
03/01/23 22:12
(^^)

231:デフォルトの名無しさん
03/01/24 10:20
あ、もちろん GNU Make の話ね。

232:デフォルトの名無しさん
03/01/31 20:12
make age

233:デフォルトの名無しさん
03/02/04 01:13
頼むからMakefileにmake love仕込んでソース収めるのやめて。

234:デフォルトの名無しさん
03/02/04 17:44
>>231
どの話?

235:デフォルトの名無しさん
03/02/07 23:40
たくさんサブディレクトリがあるとしてのお話です。

DIR_LIST:=たくさんサブディレクトリ
ARC_LIST:=$(addsuffix /lib.a,$(DIR_LIST))

さて、このARC_LISTを、それぞれのディレクトリ内のすべての.oファイルから作るとして、
はじめに思いついたのが、

$(ARC_LIST) : %/lib.c : $(wildcard %/*.o)

というやつだったのですが、このwildcardの中の%がどうやら展開されないようです。

foo/lib.c : $(wildcard foo/*.o)

こうすれば一応依存関係は作れるんですが、DIR_LISTはmakeが起動されるまでわかりません。

なんか解決法はないですか?

236:デフォルトの名無しさん
03/02/08 01:49
>>235

ARC_RULE:=$(DIR_LIST:%=.%.arc_rule)
.%.arc_rule:
@echo '$*/lib.a: $$(wildcard $*/*.o)' > $@
@echo ' $$(AR) $$(ARFLAGS) $$@ $$?' >> $@
clean::
rm -f $(ARC_RULE)
include $(ARC_RULE)

237:デフォルトの名無しさん
03/02/08 01:57
>>235
まちがいがあったので修正版。

ARC_RULE:=$(DIR_LIST:%=.%.arc_rule)
.%.arc_rule:
    @echo '$*/lib.a: $$(wildcard $*/*.o)' > $@
    @echo '    $$(AR) $$(ARFLAGS) $$@ $$?' >> $@
clean::
    rm -f $(ARC_RULE)
ifneq ($(MAKECMDGOALS),clean)
include $(ARC_RULE)
endif


238:235
03/02/08 02:14
>>236
あーいっこづつ別のファイルに出せばいいんですね。
そういうやつを一個のファイルに出してみて、「いける?」とか思って、
「あーでもこのファイル更新するタイミングがわからん」とか思ってあきらめてました。
いけそうですね。まだ試せないけど。ありがとーデス。

239:236
03/02/08 18:43
>>235
期待通りの動作になるかもしれませんが、wildcardで
全部アーカイブにするのは作り方としてよくないとおもいます。
(ソースコードを生成するためのプログラムのオブジェクトまで
拾ってしまう可能性がある。)
lib.aにするところまでサブディレクトリのMakefileで記述したほうが
いいとおもいます。



240:デフォルトの名無しさん
03/02/08 18:52
>>239
> (ソースコードを生成するためのプログラムのオブジェクトまで
> 拾ってしまう可能性がある。)
それはまた別のディレクトリにすべきなんじゃないの?

> lib.aにするところまでサブディレクトリのMakefileで記述したほうが
> いいとおもいます。
ともあれこれには同意。

241:235
03/02/08 19:30
> lib.aにするところまでサブディレクトリのMakefileで記述

そうした場合には、ディレクトリの数だけ無条件でmakeを起動してしまうわけですよね。
実は、なんとかそれを避けれないかということで、いろいろやって>>235のようになったのですよ。

242:236
03/02/09 00:44
>そうした場合には、ディレクトリの数だけ無条件でmakeを起動してしまうわけですよね。
>実は、なんとかそれを避けれないかということで、いろいろやって>>235のようになったのですよ。
ライブラリの元になるオブジェクトはいつ作るのでしょうか?
wildcardでマッチさせようとしているので、makeを起動する前にすでに
オブジェクトができているはずです。だとしたけ結局makeを
複数回起動しているのでは?



243:235
03/02/09 00:56
>>242
あ、すんません、実際にwildcardをかけるのは.cとかなんですよ。
foo/lib.c : $(patsubst %.c,%.o,$(wildcard foo/*.o))
ってな感じです。wildcardが適用されない問題に絞るために端折ってました。

244:236
03/02/09 01:10
235で$(wildcard foo/*.o)の部分は$(wildcard foo/*.c)でしょうね。
237の一部差し替え。

.%.arc_rule:
    @echo '$*_SRC:=$$(wildcard $*/*.c)' > $@
    @echo '$*_OBJ:=$$($*_SRC:%.c=%.o)' >> $@
    @echo '$*/lib.a: $$(*_OBJ)' >> $@
    @echo '    $$(AR) $$(ARFLAGS) $$@ $$?' >> $@


245:236
03/02/09 01:18
しまった。また間違いがありました。

.%.arc_rule:
    @echo '$*_SRC:=$$(wildcard $*/*.c)' > $@
    @echo '$*_OBJ:=$$($*_SRC:%.c=%.o)' >> $@
    @echo '$*/lib.a: $$($*_OBJ)' >> $@
    @echo '    $$(AR) $$(ARFLAGS) $$@ $$?' >> $@
    @echo 'clean::' >> $@
    @echo '    rm -f $$($*_OBJ)' >> $@



246:235
03/02/09 01:20
>>244
どうも。
仕事キッチリなお方ですな。

247:デフォルトの名無しさん
03/02/09 13:31
>>236 質問!
> ARC_RULE:=$(DIR_LIST:%=.%.arc_rule)
っていったい何をやっているの?

248:235
03/02/11 00:36
上手くいきましたよ。

さて、後はソースファイルが削除されたときの・・・。

>>247
ARC_RULE:=$(patsubst %,.%.arc_rule,$(DIR_LIST))
↑の、ちょっと短く書ける書式。

249:247
03/02/11 11:58
>>248
あ、そっか。ふだんはこの書き方を使わないから悩んじゃったよ。ありがと。

250:デフォルトの名無しさん
03/02/11 13:39
>>248
こんなんでどうよ。

.%.arc_rule:
    @echo '$*_SRC:=$(wildcard $*/*.c)' > $@
    @echo '$*_OBJ:=$$($*_SRC:.c=.o)' >> $@
    @echo '$*/lib.a: $$($*_OBJ)' >> $@
    @echo '    $$(AR) $$(ARFLAGS) $$@ $$?' >> $@
    @echo 'ifneq($*_SRC,$$(wildcard $*/*.c))' >> $@
    @echo '$@: .force' >> $@
    @echo 'endif' >> $@
    @echo 'clean::' >> $@
    @echo '    rm -f $$($*_OBJ)' >> $@

.PHONY: .force


251:235
03/02/11 17:10
>>250
> ifneq($*_SRC,$(wildcard $*/*.c))
ぱっと見、これが常に偽になりそうです・・・。
> $@ : .force
これは、$*/lib.a : .force ですかね。

ちょっと修正して、こんな感じになるかなぁ?(↓見やすくするための擬似表記です)

$*_SRC:=$(wildcard $*/*.c)
$*_OBJ:=$($*_SRC:.c=.o)
$*/lib.a : $($*_OBJ)
ifneq($*_OBJ,$(wildcard $*/*.o))
$*/lib.a : .force
endif

252:235
03/02/11 18:16
だめだ、対応するソースの無くなった.oを消さなきゃ。

253:デフォルトの名無しさん
03/02/12 00:38
makeのかわりにjam使ってる人いますか?
↓jam
URLリンク(www.perforce.com)

254:デフォルトの名無しさん
03/02/12 08:07
>>251
> > ifneq($*_SRC,$(wildcard $*/*.c))
> ぱっと見、これが常に偽になりそうです・・・。
なんで? $*_SRCと右の$(wildcard $*/*.c)はワイルドカードが展開されるタイ
ミングが違うはずだが。

> > $@ : .force
> これは、$*/lib.a : .force ですかね。
ちがう。ソースが追加/削除されたら.arc_ruleを書き換えたいんだろ?


255:235
03/02/13 00:57
>>254
ごめんなさい。完全に勘違いしてました。
試させてもらいました。

ソースを削除したとき、.arc_ruleは更新されますが、
lib.aの中に削除されたソースから生成した.oが含まれたままになってしまい、
リンク時に有効な.oファイルとして認識されてしまいます。

削除されたソースファイル名を認識して、対応する.oファイルを削除し、
lib.aからも削除するようにしないいといけないのですが、
既に存在しないファイルに対してmakeがアクションをおこすような指示をどう書けばいいのかが
思いつきません。

256:デフォルトの名無しさん
03/02/13 01:59
>>255
そうなるとたしかに$*/lib.aは強制的に作り直さなきゃだな。

    @{ \
    echo '$*_SRC:=$(wildcard $*/*.c)'; \
    echo '$*_OBJ:=$$($*_SRC:.c=.o)'; \
    echo '$*/lib.a: $$($*_OBJ)'; \
    echo '    @rm -f $$@'; \
    echo '    $$(AR) $$(ARFLAGS) $$@ $$?'; \
    echo '    $$(RANLIB) $$@'; \
    echo 'ifneq($*_SRC,$$(wildcard $*/*.c))'; \
    echo '$@ $*/lib.a: .force'; \
    echo 'endif'; \
    } > $@


257:235
03/02/14 01:31
>>256
そいつだと、%.arc_ruleが作り直された段階で
$*/lib.a: .force の関係がキャンセルされてしまうみたいです。
なので、%.arc_ruleの出力時に$*/lib.aを削除するようにしました。

最終的にはこのようになりまして、(↓全角スペースがタブのかわり)

.PHONY : .force_update

$(ARC_LIST) : %/lib.a :
 $(AR) $(ARFLAGS) $@ $?

ARC_RULES:=$(addsuffix /.arc_rule,$(DIR_LIST))
$(ARC_RULES) : %/arc_rule :
 @{ \
  echo '.$*_SRC:=$(wildcard $*/*.c)' ;\
  echo '.$*_OBJ:=$$(.$*_SRC:.c=.o)' ;\
  echo '$*/lib.a : $$(.$*_OBJ)' ;\
  echo 'ifneq ($$(.$*_SRC),$$(wildcard $*/*.c))' ;\
  echo '$@ : .force_update' ;\
  echo 'endif' ;\
 } >@ ;\
 $(RM) -f $*/lib.a
include $(ARC_RULES)

動作は良好です。
ソースの追加、削除、引越しを完全に追跡してくれます。
快適です。

助言くださったみなさま、ありがとうございました。

優良スレage

258:デフォルトの名無しさん
03/02/14 01:32
SRCS=`find *.c`
INCS=`find *.h`

259:デフォルトの名無しさん
03/02/14 15:10
>>257
> >>256
> そいつだと、%.arc_ruleが作り直された段階で
> $*/lib.a: .force の関係がキャンセルされてしまうみたいです。
> なので、%.arc_ruleの出力時に$*/lib.aを削除するようにしました。
$*/lib.aを%.arc_ruleに依存するようにするのはどうよ。

260:デフォルトの名無しさん
03/02/15 01:55
>>259
対応するソースの無くなったオブジェクトがlib.aに残る問題を考えると、
あのタイミングで削除してしまったほうが効率もよく、すっきりします。

261:デフォルトの名無しさん
03/02/23 00:46
Makefileを手書きしたいのですがSolaris, Linux(Redhat, Debian), CygwinをMakefile内で自動判別する方法はないですか?

262:デフォルトの名無しさん
03/02/23 00:59
環境変数OSTYPEはだめか?

263:デフォルトの名無しさん
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を書いて試してみたけど,
依存ファイルのところの記述(:のあと)で親ディレクトリに遡れないみたいで,
これでもうまくいかないですねぇ.



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