[表示 : 全て 最新50 1-99 101- 201- 301- 401- 501- 601- 701- 2chのread.cgiへ]
Update time : 05/10 01:31 / Filesize : 188 KB / Number-of Response : 751
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

make makes many problems



1 名前:デフォルトの名無しさん [02/08/18 00:51]
難しいし方言きつすぎて別の種類の make には使えないし
日本語のまともな資料ないし・・・。

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

参考リンク
tanaka-www.cs.titech.ac.jp/~euske/doc/make_qref.html
www.tk.airnet.ne.jp/nagae/jp/comp/make/makefile.html
www-or.amp.i.kyoto-u.ac.jp/algo-eng/db/makefile.html
kanon.plala.jp/develop/makefile.html
lagendra.s.kanazawa-u.ac.jp/ogurisu/manuals/make-intro/simplest.html

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

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

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

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

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

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

8 名前:デフォルトの名無しさん mailto:sage [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 名前:デフォルトの名無しさん mailto:sage [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 名前:デフォルトの名無しさん mailto:sage [02/08/18 03:32]
automake・・・・
なんでmakeごときがあんなに複雑(そう)になるのかね?

17 名前:question mailto:質問age [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 mailto:sage [02/08/18 23:12]
Makefileを書き換えずにやるのは無理じゃないか?
新しいファイルがディレクトリにあった場合Makefileを更新するツールを
スクリプト言語で書いた方が手っ取り早いだろう。


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

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



21 名前:shige mailto:sage [02/08/18 23:33]
なるほど。


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

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

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

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

25 名前:デフォルトの名無しさん mailto:sage [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 名前:デフォルトの名無しさん mailto:sage [02/08/19 23:31]
Antじゃダメなん?
うちの会社、ソースはC++だけどAntでビルドしてるけど、それって異端?

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

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

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



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

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

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

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


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

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


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

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

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

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

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

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

Xのmakedepend



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

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



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

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

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


44 名前:デフォルトの名無しさん mailto:sage [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 名前:デフォルトの名無しさん mailto:sage [02/08/25 12:30]
>>43
make setupなんて見たことないぞ。


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

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

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



51 名前:デフォルトの名無しさん mailto:sage [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 mailto:sage [02/08/30 04:14]
あ、monaっていう実行ファイルでした^^;

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

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

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

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

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


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

59 名前:デフォルトの名無しさん mailto:sage [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 名前:デフォルトの名無しさん mailto:sage [02/08/31 15:07]
make makes macro maze.

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

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

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

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

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

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

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

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

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

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


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



71 名前:68 mailto:sage [02/09/05 01:26]
>>69
やっぱりそうだよね.

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

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

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

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

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

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

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

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

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

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

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


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

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




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


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

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

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

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

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

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


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

88 名前:デフォルトの名無しさん mailto:sage [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 名前:デフォルトの名無しさん mailto:sage [02/09/10 23:55]
>>78
PascalにUNITなんてものは規定されていない罠。


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



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

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

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

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


95 名前:デフォルトの名無しさん mailto:sage [02/09/13 20:49]
ちょほいと勉強しようと思ったけど長すぎて読んでられないよ
www.gnu.org/manual/autoconf-2.53/html_mono/autoconf.html
www.gnu.org/manual/automake-1.6.1/html_mono/automake.html

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


97 名前:デフォルトの名無しさん mailto:sage [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 名前:デフォルトの名無しさん mailto:sage [02/09/14 23:24]
>>98
なんかmakefile以前の問題のような。
望むような動作をバッチファイルで書ける?



101 名前:98 mailto:sage [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 名前:デフォルトの名無しさん mailto:sage [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 名前:デフォルトの名無しさん mailto:sage [02/09/15 00:25]
>>98
もっと具体的に書いてくれないとわかんないよ。

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

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


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

よろしくお願いします。


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

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

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

114 名前:デフォルトの名無しさん mailto:sage [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 mailto:sage [02/09/15 01:33]
>>113
具体的に言うと shell でディレクトリに潜って ls でリストを変数にいれて
addprefix で bin/ なり src/ なり include/ obj/ なりを付け加えて
それを Makefile.hogera で出力して $(MAKE) -f Makefile.hogera
ってする。

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

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

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

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



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

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

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

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

125 名前: mailto:sage [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 名前:デフォルトの名無しさん mailto:sage [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 名前:デフォルトの名無しさん mailto:sage [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 名前:デフォルトの名無しさん mailto:sage [02/09/15 15:07]
>>128
検証しました。
makefile 的にはあっている模様ですが、当方の cl.exe (VC6SP5)が

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

あと
TOUCH = touch

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

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

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

133 名前:デフォルトの名無しさん mailto:sage [02/09/15 15:54]
makedepend.exe っつーのが存在するようですね。
www.google.com/search?q=cache:6G81zaaJ2fwC:hm.aitai.ne.jp/~mtani/gnuwin_2.htm+makedepend.exe&hl=ja&lr=lang_ja&ie=UTF-8

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

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


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

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

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

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

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

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

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

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

140 名前:デフォルトの名無しさん mailto:sage [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 名前:デフォルトの名無しさん mailto:sage [02/09/16 05:46]
depend:
makedepend -- $(FLAGS) -- $(ALL_C_FILES)

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


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

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


144 名前: mailto:sage [02/09/16 19:03]
>>143
here documentって知ってる?

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

146 名前:138 mailto:sage [02/09/20 02:59]
>>145
返事が遅れてゴメンなさい。

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

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


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

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








                                      氏ねよ、クソが。

149 名前:デフォルトの名無しさん mailto:xz [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 名前:デフォルトの名無しさん mailto:sage [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 mailto:sage [02/10/23 19:52]
>>151
そんな記述ができるんですね。
すごく勉強になります。

ありがとうございます。


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


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

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

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

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

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

159 名前:デフォルトの名無しさん mailto:sage [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 名前:デフォルトの名無しさん mailto:sage [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 名前:かなり適当 mailto:sage [02/11/25 18:33]
>>160
> .SUFFIXES: .o .s .dsm .c .cc .cpp
この行消してみるとどうなる?

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

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

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

176 名前:デフォルトの名無しさん mailto:sage [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 mailto:sage [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]
happysize.com/techie/autodep/
↑こんなんもあるぜ。
漏れはソースを俺様カスタマイズしてつかってるぜ。

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 mailto:sage [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 名前:デフォルトの名無しさん mailto:sage [02/12/03 20:14]
gcc -MMしろ

184 名前:デフォルトの名無しさん mailto:vxee [02/12/08 02:46]


185 名前:デフォルトの名無しさん mailto:nnbb [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 名前:デフォルトの名無しさん mailto:sage [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 名前:デフォルトの名無しさん mailto:sage [02/12/10 17:46]
>>186
マルチかよ!



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

192 名前:IP記録実験 mailto:IP記録実験 [03/01/08 21:19]
IP記録実験
qb.2ch.net/test/read.cgi/accuse/1042013605/

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

194 名前:デフォルトの名無しさん mailto:sage [03/01/09 03:27]
qb.2ch.net/test/read.cgi/accuse/1042013605/114-119

/ヽァ/ヽァ

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

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

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


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

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

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

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

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

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

んじゃ!

────────────────────────Age2ch─
■この書き込みは、Age2chを使って配信されています。
────────────────────────────
Keep your thread alive !
pc3.2ch.net/test/read.cgi/software/1041952901/l50
────────────────────────────

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

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

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



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

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

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

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

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

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

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


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

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

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

207 名前:デフォルトの名無しさん mailto:sage [03/01/10 16:53]

何が変わるんですか。

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


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

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

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

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



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



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

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

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

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

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

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

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

んじゃ!

────────────────────────Age2ch─
■この書き込みは、Age2chを使って配信されています。
────────────────────────────
Keep your thread alive !
pc3.2ch.net/test/read.cgi/software/1041952901/l50
────────────────────────────

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

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


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

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

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

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

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




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

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


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

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

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

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

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

227 名前:山崎渉 mailto:(^^)sage [03/01/13 19:01]
(^^)

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

229 名前:山崎渉 mailto:(^^)sage [03/01/15 18:14]
(^^)

230 名前:山崎渉 mailto:(^^)sage [03/01/23 22:12]
(^^)



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

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

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

234 名前:デフォルトの名無しさん mailto:sage [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 mailto:sage [03/02/08 02:14]
>>236
あーいっこづつ別のファイルに出せばいいんですね。
そういうやつを一個のファイルに出してみて、「いける?」とか思って、
「あーでもこのファイル更新するタイミングがわからん」とか思ってあきらめてました。
いけそうですね。まだ試せないけど。ありがとーデス。

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



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

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



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

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

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



243 名前:235 mailto:sage [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 mailto:sage [03/02/09 01:20]
>>244
どうも。
仕事キッチリなお方ですな。

247 名前:デフォルトの名無しさん mailto:sage [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 mailto:sage [03/02/11 11:58]
>>248
あ、そっか。ふだんはこの書き方を使わないから悩んじゃったよ。ありがと。

250 名前:デフォルトの名無しさん mailto:sage [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 mailto:sage [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 mailto:sage [03/02/11 18:16]
だめだ、対応するソースの無くなった.oを消さなきゃ。

253 名前:デフォルトの名無しさん [03/02/12 00:38]
makeのかわりにjam使ってる人いますか?
↓jam
www.perforce.com/jam/jam.html

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

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


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

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

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

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

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



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

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

263 名前:デフォルトの名無しさん mailto:sage [03/02/23 01:05]
>>262
OSTYPEでうまくいきそうですがLinuxは両方linux-gnuになってしまいます。
setやenvにはディストリビューションの情報はなさそうです。
両者の区別は可能ですか?

264 名前:デフォルトの名無しさん mailto:sage [03/02/23 01:09]
>>263
サポートしているモノのうちのひとつを引数で受け取る仕様に汁。

265 名前:デフォルトの名無しさん mailto:sage [03/02/23 09:51]
Linux,CygwinではGNUmakefileをつくって、その中で

SYSTEM := $(...) # ディストリビューションを見分けるプログラムを呼ぶ。
include Makefile


266 名前:デフォルトの名無しさん mailto:sage [03/02/23 09:51]
>>265
> SYSTEM := $(...) # ディストリビューションを見分けるプログラムを呼ぶ。
しまった。$(shell ...)ね。

267 名前:山崎渉 mailto:(^^) [03/04/17 16:04]
(^^)

268 名前:山崎渉 mailto:(^^)sage [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 名前:デフォルトの名無しさん mailto:sage [03/05/26 21:58]
unameじゃだめなの?



271 名前:デフォルトの名無しさん mailto:sage [03/05/26 22:00]
あ、ごめん。なんでもない

272 名前:デフォルトの名無しさん mailto:sage [03/05/27 01:37]
>>269
.PHONY ではなくて?

273 名前:269 mailto:sage [03/05/27 08:55]
>>272
できました!
ありがとうございました。

274 名前:山崎渉 mailto:(^^) [03/05/28 12:42]
     ∧_∧
ピュ.ー (  ^^ ) <これからも僕を応援して下さいね(^^)。
  =〔~∪ ̄ ̄〕
  = ◎――◎                      山崎渉

275 名前:デフォルトの名無しさん mailto:あげ [03/06/14 02:02]
あげ

276 名前:デフォルトの名無しさん [03/06/20 09:07]
cygwinのmakeで、コマンドラインが長すぎるときにエラーが出てしまいます。
同じコマンドラインでも、Windows98上ではエラーにならず、Windows2000では
エラーになります。

エラーメッセージは
make: *** [target] Error 255
というもので原因や対策がはっきりわかりません。

検索すると、よく知られた問題のようですが、根本的な解決方法は見つかりませんでした。

というわけで、
おしえて、えろいひと。

277 名前:デフォルトの名無しさん mailto:sage [03/06/20 13:16]
>>276
解決法: コマンドラインの引数を少なくする
……しかないんじゃないの?

278 名前:276 mailto:sage [03/06/22 16:18]
>>277
すでに動いていた環境でファイル数が増えたからエラーになったのです。
そんなわけで、簡単に引数は少なくできません。

cygwinスレにでも逝ってみます。

279 名前:山崎 渉 mailto:(^^) [03/07/15 10:44]

 __∧_∧_
 |(  ^^ )| <寝るぽ(^^)
 |\⌒⌒⌒\
 \ |⌒⌒⌒~|         山崎渉
   ~ ̄ ̄ ̄ ̄

280 名前:山崎 渉 mailto:(^^) [03/07/15 14:04]

 __∧_∧_
 |(  ^^ )| <寝るぽ(^^)
 |\⌒⌒⌒\
 \ |⌒⌒⌒~|         山崎渉
   ~ ̄ ̄ ̄ ̄



281 名前:デフォルトの名無しさん mailto:sage [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 名前:デフォルトの名無しさん mailto:sage [03/07/24 13:22]
>>281
自己レスです
[がシェルコマンドとは気づかなかった
Solarisのbin/shだと [-eが使えなかった模様
すいませんでした。

283 名前:デフォルトの名無しさん mailto:sage [03/07/24 17:53]
あるだろ。
ttp://www.freebsd.org/cgi/man.cgi?query=test&sektion=1&apropos=0&manpath=SunOS+5.9

ところで[]の内側にほんとにスペース入れてないのか?

284 名前:デフォルトの名無しさん mailto:sage [03/07/24 21:27]
>>283

いれてません。
bin/shで-eオプションがないようです。

bin/ksh じゃないと駄目みたいなんですが、
GUN makeってbin/shじゃないと駄目ってのはありませんでしたっけ?


285 名前:デフォルトの名無しさん mailto:sage [03/07/24 21:28]
>>283
誤解を招くので追記(汗
全角スペースの意味でとりました。
半角は入ってます


286 名前:デフォルトの名無しさん mailto:sage [03/07/24 22:35]
じゃ[ -d $(DEPDIR) ]は?

287 名前:デフォルトの名無しさん mailto:sage [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 名前:デフォルトの名無しさん mailto:sage [03/07/27 19:42]
-rm
rm -f *.o *.a

290 名前:山崎 渉 mailto:(^^)sage [03/08/02 02:16]
(^^)



291 名前:三村 mailto:sage [03/08/04 21:16]
>>276
えろいひとかよっ!

292 名前:山崎 渉 mailto:(^^) [03/08/15 16:24]
    (⌒V⌒)
   │ ^ ^ │<これからも僕を応援して下さいね(^^)。
  ⊂|    |つ
   (_)(_)                      山崎パン

293 名前:デフォルトの名無しさん [03/08/24 13:10]
大きいプロジェクトをmakeしていると、今どの程度makeが終わったのか分からなくて不安になるんですが
進捗を表示しつつmakeする方法ってありませんか?

294 名前:デフォルトの名無しさん mailto:sage [03/08/24 13:17]
echo

295 名前:デフォルトの名無しさん mailto:sage [03/08/24 14:40]
>>293
@を外す

296 名前:デフォルトの名無しさん mailto:sage [03/08/24 15:35]
希望が「完成率 30%」とかの表示だと、難しそうな気がする…

297 名前:デフォルトの名無しさん [03/09/14 13:55]
砂時計を使う。

298 名前:デフォルトの名無しさん mailto:sage [03/09/14 14:49]
>>293
大きいプロジェクトならmakefile分割しなよ。
そうすれば望みもかなうし管理も楽になるから。

299 名前:デフォルトの名無しさん [03/09/14 14:51]
date;make

後は、現在時刻と表示された時刻を見比べて、「どの程度」なのかを推測しろ。
できるよな? な?

300 名前:300 mailto:sage [03/09/16 23:50]
この偉大なスレの300が数日間も放置されていようとはな。



301 名前:デフォルトの名無しさん mailto:sage [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 名前:デフォルトの名無しさん mailto:sage [03/09/19 06:28]
3.80から使えるeval(ttp://www.gnu.org/manual/make/html_node/make_87.html#SEC91)を使えば、

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 名前:デフォルトの名無しさん mailto:sage [03/09/22 14:35]
makeの次がantとはね・・・
この中間にある書きやすくて読みやすくて高機能なビルド支援ツールってないのかね。

305 名前:302 mailto:sage [03/09/22 17:44]
>>303
おお、ありがと。
しかし、自分用の makefile ならいいけど、配布用だとまだ使うのは早いかな...


306 名前:303 mailto:sage [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 mailto:sage [03/09/24 01:29]
>>306
おお、makefile を更新したら、ちゃんとルールファイルを更新してから
include するんですね。これは使えそうです。どうも、ありがと。

# $(MAKEFILE) は自分で値を設定しておかないといけないみたいですね。


308 名前:デフォルトの名無しさん mailto:sage [03/10/06 03:34]
ant

309 名前:デフォルトの名無しさん mailto:sage [03/10/19 12:42]
giant-ant

310 名前:デフォルトの名無しさん mailto:sage [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 名前:デフォルトの名無しさん mailto:sage [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 名前:デフォルトの名無しさん mailto:sage [03/11/16 00:52]
makeを使うのに、
makefileを書く必要はないんです。
ただ単に、hello.cをコンパイルしたければ
「make hello」とか「make hellow.exe」と打つだけです。
何が難しいんですか?

...makefileを書かねばならんのは、
分割コンパイルをや非標準のライブラリの導入をする
中級者以上だけです。


316 名前:いなむらきよし [03/11/16 01:04]
キケー!

317 名前:デフォルトの名無しさん mailto:sage [03/11/17 09:48]
makefileもかけないでプログラマ気取りですか?

318 名前:デフォルトの名無しさん mailto:sage [03/11/17 12:44]
俺はMakefileしか書かないよ。

319 名前:デフォルトの名無しさん mailto:sage [03/11/17 13:00]
俺はGNUmakefileしか書かないよ。


320 名前:デフォルトの名無しさん mailto:sage [03/11/17 15:29]
そのうち
#!/usr/bin/make
なんてスクリプトが書かれるのかな。嫌だな。



321 名前:デフォルトの名無しさん mailto:sage [03/11/17 18:05]
書いたことあるよ。

322 名前:デフォルトの名無しさん mailto:sage [03/11/17 22:38]
make って微妙に挙動が違うから, GNU make 専用に Makefile を書くか,
いろんな make で扱えるように Makefile を書くかで, 面倒くささが
変わってきて, ちょっといや.

323 名前:デフォルトの名無しさん mailto:sage [03/11/17 22:40]
make って微妙に挙動が違うから, GNU make 専用に Makefile を書くか,
いろんな make で扱えるように Makefile を書くかで, 面倒くささが
変わってきて, ちょっといや.

324 名前:デフォルトの名無しさん mailto:sage [03/11/17 22:40]
gmake,pmake,nmake
他には?

325 名前:デフォルトの名無しさん mailto:sage [03/11/17 23:10]
余計なこと書きすぎるとポータビリティーがないのよ。
7行プログラムじゃないけど、必要最小限、極力簡潔に書くの。

326 名前:デフォルトの名無しさん mailto:sage [03/11/18 02:10]
俺はgmakeで統一。
Windowsでもcygwin/binにパス通して使ってる。
nmakeは名前違うからいいけどBorlandのはまんまmakeで激しく迷惑だな。

327 名前:デフォルトの名無しさん mailto:sage [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 名前:デフォルトの名無しさん mailto:sage [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 名前:デフォルトの名無しさん mailto:sage [03/11/19 01:01]
書かされたって仕事でWideStudio使ってるのか?

330 名前:デフォルトの名無しさん mailto:sage [03/11/19 03:22]
>>329
仕事じゃないよ。でも後で使うつもり。
低機能だけどMFCやVCLよりシンプルで使うのがラクだからね。



331 名前:デフォルトの名無しさん mailto:sage [03/11/21 12:38]
windowsでmakefileなんか書くなバカ

332 名前:デフォルトの名無しさん mailto:sage [03/11/22 13:44]
>>331
5年ほど前、100m離れた自席とマシン室の間往復するのが面倒で、
自席のPCにCygwin入れてマシン室のサーバ機からtelnetでログイン、
nmake叩いてコンパイル、できたファイルをFTP GETとかやってた。

あの頃はTerminal Serviceがまだ標準じゃ無かったんで、nmake
マンセーだったよ。

333 名前:デフォルトの名無しさん mailto:sage [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 名前:時代錯誤 mailto:sage [03/11/30 07:33]
javaならxmlで記述するからな〜。makeかぁ、懐かしいね〜隔世の感・・・

336 名前:デフォルトの名無しさん mailto:sage [03/11/30 10:31]
>>335
お前みたいなのがJavaの品格を貶めているんだよ?わかってる?

337 名前:デフォルトの名無しさん mailto:sage [03/11/30 12:58]
>>328
> makeをgmake.exeにリネームするとmakeを起動するmakefileが通らんので、
Makefileの書き方が悪い。$(MAKE)を使うべき。

338 名前:デフォルトの名無しさん mailto:sage [03/11/30 19:10]
make allとかやったときサブのmakefileにall渡すのはどのマクロ?

339 名前:デフォルトの名無しさん mailto:sage [03/12/01 00:03]
>>338
普通にターゲットだから $@ の模様。

340 名前:デフォルトの名無しさん mailto:sage [03/12/02 01:39]
GNU Make だと MAKECMDGOALS つーのもあるが

>>311
> FILE_3 = *.tmp
これも GNU Make だと
FILE_3 := $(wildcard *.tmp)
かな? キモは ":=" を使って、その場で展開しておくこと。



341 名前:デフォルトの名無しさん mailto:sage [03/12/02 20:33]
>>340
> キモは ":=" を使って、その場で展開しておくこと。

ををっ、腹ショー!!

342 名前:デフォルトの名無しさん mailto:sage [03/12/06 15:00]
make debugってやったらターミナルだとgdb,Xが起動していたらGUIデバッガを起動する。
というのをやりたいんですが、どうやって判別すればいいですか?

343 名前:デフォルトの名無しさん mailto:sage [03/12/06 22:30]
>>342
X 上で走っているターミナルの場合はどうすんねん、ってのは揚げ足とりだよなぁ。
とりあえず環境変数 DISPLAY が設定されているか否かで判別すれば?

344 名前:デフォルトの名無しさん mailto:sage [03/12/08 18:11]
DEBUGGER := $(if $(DISPLAY),xxgdb,gdb)

debug:; $(DEBUGGER) $(TARGET)


345 名前:デフォルトの名無しさん mailto:sage [03/12/17 23:02]
前から思ってたんだけど、makeなんて新しいプログラム用意するんじゃなくて、
シェルスクリプトのライブラリという形で提供すれば良かったんじゃないの?
当時の貧弱な計算機環境だと、巨大なシェルスクリプトが重荷になったのかも
しれないけどさ。新しく文法覚えてツールを使うっていうのは、当時の利用技能の
高いユーザにとっても面倒なことだったと思うけどなあ。

346 名前:デフォルトの名無しさん mailto:sage [03/12/18 01:01]
>>345
チンパンジーのアイちゃんですか?

347 名前:デフォルトの名無しさん mailto:sage [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 名前:デフォルトの名無しさん mailto:sage [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 名前:デフォルトの名無しさん mailto:sage [04/02/14 02:21]
makeはわかるけどconfigureの書き方がわからない




351 名前:デフォルトの名無しさん mailto:sage [04/02/14 15:35]
>>350
さすがに configure 直書きとかじゃないよな?
Autoconf 使ってるのなら↓からぱくってくるなり参考にすればいいんじゃないかな。
ttp://www.gnu.org/software/ac-archive/htmldoc/index.html

352 名前:デフォルトの名無しさん [04/03/25 02:35]
ルールのコマンドを実行するシェルの環境変数をmakefile内で設定することはできますか?
設定したい環境変数は複数あって、それらをすべてのルールのコマンドに反映させたいです。

353 名前:デフォルトの名無しさん mailto:sage [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 名前:デフォルトの名無しさん mailto:sage [04/03/30 17:57]
>>354
ストップウォッチ

356 名前:デフォルトの名無しさん mailto:sage [04/03/30 18:05]
>>354
time

357 名前:354 mailto:sage [04/03/30 19:44]
>>356
bin の中を探してたんで、そんなのがあるのを知りませんでした。
>>355
最初は使ってましたが、一分以上待つのはつらいです。

ありがとうございました。

358 名前:デフォルトの名無しさん [04/04/23 09:26]
ターゲット、依存ファイル、文字列関数の扱う文字列など、
スペース区切りのリストの中にスペースを含む文字列(ファイル名)を
一つの要素として入れるにはどうしたらいいんでしょうか?

359 名前:デフォルトの名無しさん mailto:sage [04/04/23 10:31]
my\ document
みたいに\でエスケープする。

360 名前:358 mailto:sage [04/04/23 23:45]
>>359
ありがとうございます。
ターゲット、依存ファイルには置けるようになりました。
ですが、文字列関数にわたすと複数の要素に分割されてしまいました。

このエスケープはどんな仕様で動作しているのでしょうか?
マニュアルに書いてあります?



361 名前:デフォルトの名無しさん mailto:sage [04/04/24 14:40]
最近、環境を移行する作業してました。
かなり昔に作られたmakeファイルや、誰が作ったのかわからないmakeファイルを
新環境用に「感」で直しつつ作業してました。

ある程度manで調べたりしたけど、本当・・・難しい。
まともな日本語の本ってないんですかね?1にも書いてありますが。

362 名前:デフォルトの名無しさん mailto:sage [04/04/25 09:07]
>>360
言語もわからんのに答えられるわけねーだろボケ!

363 名前:358 mailto:sage [04/04/25 13:29]
>>362
言語?あ・・・。

すいません。GNU makeです。

364 名前:デフォルトの名無しさん [04/05/11 13:36]
SRCS=$(shell ls *.c)
とやると.cのファイルが全く無い場合
>そのようなディレクトリやファイルはありません。
というエラーメッセージが表示されてしまいます。
メッセージを出力しないようにするにはどうすればいいですか?

365 名前:デフォルトの名無しさん mailto:sage [04/05/11 14:08]
>>364
SRCS=$(shell ls *.c 2>/dev/null) は使いたくないか?


366 名前:デフォルトの名無しさん mailto:sage [04/05/11 22:12]
ふつうは、$(shell echo *.c) か $(wildcard *.c) だろ

367 名前:  [04/05/21 15:56]
makefileって難しいです
質問ですが、
LINUXでg++でコンパイルするmakefileを
作ったんですが、

エンディアンをビッグ<−>リトルを
切り替えられるような方法を教えてほしいのですが

CFLAGに設定するようなものなのでしょうか?

368 名前:デフォルトの名無しさん mailto:sage [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 mailto:sage [04/05/21 16:31]
>>368
ふええ 懇切丁寧にありがとうございます
いくらググッても なかなか出てこなくて困惑していたんです
ありがとうございます


370 名前:368 mailto:sage [04/05/21 16:32]
タブ入んないんですね.
>>368
DEFS = -DWORDS_BIGENDIAN
hoge.o: hoge.cpp
- g++ $(DEFS) hoge.cpp
+ <TAB>g++ $(DEFS) hoge.cpp




371 名前:デフォルトの名無しさん mailto:sage [04/05/22 13:13]
>>367
そもそもエンディアンに依存したコードを書こうとするのが良くない。
ビットシフトとか何とか使って最初からエンディアンに依存しない実装に汁。

372 名前:デフォルトの名無しさん mailto:sage [04/05/22 13:16]
>>371
現実を知れ
タコ助が

373 名前:デフォルトの名無しさん mailto:sage [04/05/22 15:54]
>372
>371 は至極当然のことを言ってると思うんだけど、問題になるのは性能なの?

374 名前:デフォルトの名無しさん mailto:sage [04/06/09 17:00]
makeなんてバッドノウハウの塊だ・・・階層化するともうめちゃくちゃ

375 名前:デフォルトの名無しさん mailto:sage [04/06/20 14:03]
make嫌いや
環境変数LIBを上書きして定義してて2日も悩んでた。orz
あほだ

376 名前:デフォルトの名無しさん [04/06/23 16:50]
ソースとオブジェクトファイルが混ざらないように、
オブジェクトファイルの出力先を変えたいんですが、

%.o : %.cpp
  $(CXX) $(CXXFLAGS) -c $< -o $(OUTDIR)$@

とか書いてしまうと毎回オブジェクトファイルが生成しなおされてしまいます。
なんかうまい手ないでしょうか?

377 名前:デフォルトの名無しさん mailto:sage [04/06/23 17:07]
>>376
オブジェクトファイルの出力先にMakefileを書いて試してみたけど,
依存ファイルのところの記述(:のあと)で親ディレクトリに遡れないみたいで,
これでもうまくいかないですねぇ.


378 名前:デフォルトの名無しさん mailto:sage [04/06/23 20:14]
>>376
$(OUTDIR)/%.o : %.cpp
  $(CXX) $(CXXFLAGS) -c $< -o $(OUTDIR)$@


379 名前:デフォルトの名無しさん mailto:sage [04/06/23 23:44]
なんだ。makeが好きなの俺だけか・・・。
他になんか便利なビルドツールあったらおしえちくり

380 名前:デフォルトの名無しさん mailto:sage [04/06/23 23:46]
Antぐらいかな



381 名前:デフォルトの名無しさん mailto:sage [04/06/24 00:43]
bjam

382 名前:デフォルトの名無しさん mailto:sage [04/06/24 00:44]
>>378
$(OUTDIR)/%.o : %.cpp
  $(CXX) $(CXXFLAGS) -c $< -o $@

383 名前:デフォルトの名無しさん mailto:sage [04/06/24 05:15]
>>379
MSBuild

384 名前:376 mailto:sage [04/06/24 16:15]
>>378,>>382

GNU Make 3.80使ってるんだが、
$(OUTDIR)/%.o : %.cpp
だと条件にひっかからね。

385 名前:デフォルトの名無しさん mailto:sage [04/06/24 19:07]
ふつー、OUTDIRにMakefileを作って
VPATH = $(SRCDIR)


386 名前:デフォルトの名無しさん [04/06/24 19:10]
gnu makeの最新日本語リファレンスってないの?

387 名前:デフォルトの名無しさん mailto:sage [04/06/24 19:53]
>>386
ftp://ftp.ascii.co.jp/pub/GNU/make/
だと古い?一つ前なんだけど。


388 名前:デフォルトの名無しさん mailto:sage [04/06/24 22:33]
>>384
んなわけねー
$(OUTDIR)%.o : %.cpp
ってオチか?

389 名前:376 mailto:sage [04/06/25 21:56]
>>385
サンクスコ

390 名前:デフォルトの名無しさん mailto:sage [04/07/13 03:07]
VC++(NMAKE)で作ったmakeファイルって
Linuxで使用できるんですか??

おせーてくだされ。



391 名前:デフォルトの名無しさん mailto:sage [04/07/13 20:41]
>>390
VC++の自動生成で作ったmakは、nmake方言をバリバリ使用
しているので無理。

つーかそもそもVC++系のcl.exe/link.exeがLinuxには無いし、
各コマンドのオプションもgccとは全然違うんだから、流用しよう
なんて考えが無謀だろ。

nmake方言を極力使わないようにして書いた手作りmakなら、
CC/LD辺りのマクロを変えるだけで動く可能性はあるが。

392 名前:デフォルトの名無しさん mailto:sage [04/07/13 22:13]
>>391
上級者様、ありがとうございまっす!
自分の望んだ以上のお答えでありました!

VC++で出来るだけデバッグして、Linuxに持って行って
makeファイルでコンパイルをたくらんでいるのですが、
VC++で作ったmakeファイルではダメですか…

手書きで書かないとダメなんすかねぇ…

393 名前:デフォルトの名無しさん mailto:sage [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 名前:デフォルトの名無しさん mailto:sage [04/07/23 19:56]
make make make!

397 名前:デフォルトの名無しさん mailto:sage [04/07/23 20:08]
>>394
www.ecoop.net/coop/translated/GNUMake3.77/make_7.jp.html#SEC70


398 名前:デフォルトの名無しさん mailto:sage [04/07/23 20:18]
そんなまともな日本語のドキュメントがあったのか。

399 名前:デフォルトの名無しさん [04/07/26 00:12]
再帰的makeする時、上の階層のMakefileで定義した変数
を下位階層のMakefileに継承させたいのですが、どうすればよいでしょうか。

400 名前:デフォルトの名無しさん mailto:sage [04/07/26 00:21]
>>399 ttp://www.gnu.org/software/make/manual/html_chapter/make_5.html#SEC60



401 名前:デフォルトの名無しさん mailto:sage [04/08/05 23:55]
POSIX標準のmakeってどうして作れないの?
shみたいになんとかしてほしいよ。automakeはよく分らんし。

402 名前:デフォルトの名無しさん mailto:sage [04/08/06 01:35]
gnu makeでいいじゃん。
自分のreadmeには必須と書いてあるよw

403 名前:デフォルトの名無しさん mailto:sage [04/08/07 02:59]
perlみたいに商用UNIXにも標準搭載してくれりゃ構わんけどな。

404 名前:デフォルトの名無しさん mailto:sage [04/08/07 09:49]
automake,autoconf使えばいいじゃん。あれこそ最高のハックだよ。
UNIXプログラマ必須のツールだと思うけどね。だからNetBSDみたいに、
GNUツールの全てのMakefileを自前のmake用に新規に書くのは嫌い。
もちろんビルド時間の節約にかなり貢献してるのは認めるけど。。。。

>>403
gmakeは他のGNU系列のパッケージには依存してないよな。gmake必須と
するのは、別にGNU原理主義とも関係ないと思う。

405 名前:デフォルトの名無しさん mailto:sage [04/08/08 21:28]
automake, autoconf使ってるのでもGNU make依存してるのとかあった
ような。(まぁそいつの使い方がなってなかっただけかもしれんが)

406 名前:デフォルトの名無しさん [04/10/08 17:12:14]
あげ

407 名前:デフォルトの名無しさん mailto:sage [04/10/11 14:38:29]
cookってのはどうなんですか

使ったことないんで使い勝手がわからんばい

408 名前:デフォルトの名無しさん mailto:sage [04/10/28 01:46:23]
make.paulandlesley.org/autodep.html
-MMD だけで良いと思ってましたが、だめなようです。
どなたか解説していただけませんか。

409 名前:デフォルトの名無しさん mailto:sage [04/10/28 01:48:11]
boost が好きなんですが、make の替わりに、bjam を使うのはどうなんでしょう?

410 名前:デフォルトの名無しさん mailto:sage [04/10/28 15:07:58]
>>409
どっちが君の言いたいことか曖昧な気がするので両方答えてみる。

q1) boostがmakeの代わりにbjam使ってるのってどうよ?
a1) いいんじゃない? ある意味makeよりポータブルだし。

q2) 漏れもbjam使いたいけど、いいの?
a2) チーム開発ならリーダー以下チーム全員に合意を取り付けないと。
  個人なら好きなのを使って問題なし。



411 名前:409 mailto:sage [04/10/28 16:23:20]
>>410
言われてみれば、とってもあいまいでした。
q2) の方を訊いてみたかった個人開発の者です。
今は前に書いた makefile を使いまわして、それなりに満足していますが、
あの boost があえて使う bjam は、どんな感じなんだろうかと思ったんです。
けど、ポータブルなところで選ばれてる気がしてきました。

実際に使ってる人の意見も聞いてみたいです。

412 名前:デフォルトの名無しさん [04/10/30 22:36:17]
www.microsoft.com/japan/msdn/library/default.asp?url=/japan/msdn/library/ja/vccore/html/_asug_batch.2d.mode_rules.asp
GNU make で上のようなことはできませんか?

413 名前:デフォルトの名無しさん [04/10/30 23:12:19]
うちの会社の人バッチファイルで全部コンパイルしてるよ。
だから一部だけ修正しても全モジュールリビルドしてリリースしてる。

414 名前:デフォルトの名無しさん mailto:sage [04/10/31 02:03:47]
一行変えたら全部コンパイルやり直しなんてやってられないな...

415 名前:デフォルトの名無しさん mailto:sage [04/10/31 02:29:19]
自分はmake使ってるけどC++のヘッダにコード書きまくるんで結構遅い・・・

416 名前:デフォルトの名無しさん mailto:sage [04/10/31 10:51:35]
>>415
いったい何を書いてるの?

そういう漏れは、Pimpl Idiom 教団に入信しちゃった。

417 名前:デフォルトの名無しさん mailto:sage [04/11/04 10:13:35]
VC++でプリコンパイルヘッダガンガン使うようになってからは、
iostreamの代わりにiosfwdをインクルードとかそういう事を考える必要も無くなったな。

418 名前:デフォルトの名無しさん mailto:sage [04/11/04 11:12:25]
ガンガンっていうかあまりにあたりまえの機能過ぎて
gccに付いてないのを知ってびびった。
3.xには付いてるんだっけ?

419 名前:デフォルトの名無しさん mailto:sage [04/11/05 04:47:57]
>>418
3.4 からです。

何年も待って、やっとキター。と思ったら、3.4 はびみょーな出来栄えだったのな。

420 名前:デフォルトの名無しさん mailto:sage [04/11/06 00:42:40]
プリコンパイル済みヘッダて変な日本語だよな



421 名前:デフォルトの名無しさん mailto:sage [04/11/06 12:41:00]
別に

422 名前:デフォルトの名無しさん mailto:sage [04/11/07 22:43:24]
頭痛が痛いみたいな

423 名前:デフォルトの名無しさん mailto:sage [04/11/07 23:07:36]
precompil"ed" headerなんだから、特に変だとは思わないけど。

424 名前:デフォルトの名無しさん mailto:sage [04/11/07 23:37:32]
むしろ「済み」だけ日本語にするバランス感覚が受け入れ難い。

425 名前:デフォルトの名無しさん mailto:sage [04/11/08 01:54:48]
プリコンパイル済み

事前にコンパイルが済んでいる
だろ。どこがおかしいのやら。

426 名前:デフォルトの名無しさん mailto:sage [04/11/08 07:16:26]
>>425
それなら「事前コンパイル済みヘッダ」になるだろ。
なぜ「プリコンパイルドヘッダ」ではないのだろうか?
どうやらMSの翻訳が元のようだが。

427 名前:デフォルトの名無しさん mailto:sage [04/11/08 19:53:37]
>>426
普通カタカナに直す時に「ド」なんて書かない。あなた日本人?

428 名前:デフォルトの名無しさん mailto:sage [04/11/08 19:55:46]
へぇ(嘲笑)

429 名前:デフォルトの名無しさん mailto:sage [04/11/08 20:16:47]
なら、プリコンパイルヘッダでいいじゃん。済みなんて入れる必要もない。

430 名前:デフォルトの名無しさん mailto:sage [04/11/08 20:31:05]
↑論点ずれてる



431 名前:デフォルトの名無しさん mailto:sage [04/11/09 00:16:14]
いまさらMS翻訳にケチつけるなよ。
いったいなにがしたいんだ。

432 名前:デフォルトの名無しさん [04/11/12 08:38:43]
>>427
> 普通カタカナに直す時に「ド」なんて書かない。
よくあるがこれは変な習慣だよなあ。そもそも、なんで抜くのかが疑問だ。コレMSが始めたのか?

433 名前:デフォルトの名無しさん mailto:sage [04/11/12 08:51:46]
>>427
メモリマップドI/Oとか言うじゃん

434 名前:M.B. [04/11/12 11:33:11]
全部読んだが make を自分で書いたアフォは漏れだけだった…… orz

435 名前:デフォルトの名無しさん mailto:sage [04/11/12 12:29:46]
>>433
それは「ド」ではなく「ト」では?

436 名前:デフォルトの名無しさん mailto:sage [04/11/13 02:37:12]
>434
(;´Д`)
漏れも、なんか make をうまく使いこなせなくて
癇癪起こしちゃって自分で書こうとした事があるよ……

437 名前:M.B. mailto:sage [04/11/13 15:24:17]
Java のプログラムを Win 上で開発しているのだが、
昔アスキーで出してたような、.exe 形式の make が見当たんなくてさ、
GNU make のソースを Cygwin 上でコンパイルして
.exe 形式にすりゃあいいと思ったんだが結局ソースが見つからず、
ええい面倒臭え、と思って Java で書いた。
非常にチャチなものだが便利に使ってる。

438 名前:デフォルトの名無しさん mailto:sage [04/11/13 17:13:54]
>>437
GNU make のソースが見つからないって、アフォか。

439 名前:デフォルトの名無しさん mailto:sage [04/11/13 19:02:26]
てか、cygwinにGNU makeのバイナリがあるだろが。

440 名前:デフォルトの名無しさん mailto:sage [04/11/13 19:03:33]
javaならant使えよ・・・



441 名前:デフォルトの名無しさん mailto:sage [04/11/13 19:55:33]
ぶかあああああああああああああああああああああああああああああああああ

442 名前:デフォルトの名無しさん mailto:sage [04/11/13 20:52:21]
ワロタ

443 名前:M.B. [04/11/13 23:13:39]
ぶかー。

444 名前:デフォルトの名無しさん mailto:sage [04/11/13 23:17:33]
makefile書くまでもないような処理をバッチファイルで
ftimecomp source target && ( sourceからtargetを作る処理 )
とかはたまにやるけど。ftimecompは自作ツール。

445 名前:M.B. [04/11/13 23:23:45]
自作せんとね、使い方忘れるのよ。
いらんものいろいろ作ったなぁ。

446 名前:デフォルトの名無しさん mailto:sage [04/11/14 00:00:07]
その自作ツールの使い方を忘れるんで、
Makefileに書いておくんだけどな、おれ

447 名前:M.B. [04/11/14 00:18:42]
漏れも自分ちの電話番号とか忘れるんで紙に書いてしまっとくんだが、
どこにしまったか忘れる。

448 名前:デフォルトの名無しさん mailto:sage [04/11/14 00:29:24]
>>447 無駄話でageんな

449 名前:M.B. mailto:sage [04/11/14 00:50:29]
ここでも言われた _| ̄|○

450 名前:デフォルトの名無しさん [04/11/19 22:59:34]
2重コロンの意味がわかんね
よく単一ターゲットに使われるみたいだけど
どういう意味なの?



451 名前:デフォルトの名無しさん mailto:sage [04/11/20 09:13:01]
>>450

マニュアル読め
www.ecoop.net/coop/translated/GNUMake3.77/make_4.jp.html#SEC41


452 名前:デフォルトの名無しさん mailto:sage [04/11/20 13:19:25]
よんだけどわかんなかったんだよぅOTL

453 名前:デフォルトの名無しさん mailto:sage [04/11/20 18:31:09]
>>452
カードキャぷたーさくらってマジ面白いよな。

454 名前:デフォルトの名無しさん mailto:sage [04/11/21 17:55:08]
>>452
> よんだけどわかんなかったんだよぅOTL

同志よ、俺もわからん。
でも、普通に依存関係書いている分には必要ないような気がする。


455 名前:デフォルトの名無しさん mailto:sage [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 名前:デフォルトの名無しさん mailto:sage [04/11/21 21:04:44]
make が sh と結びついている時点で最悪なんだよ。
perl か python と結びついてほしい。
たいていの UNIX には perl や python は入っているだろうし。

458 名前:デフォルトの名無しさん [04/11/21 21:05:18]
>Ant は処理系が Java で書かれているし
インスコすれば、そんなことは誰もわからない。


459 名前:デフォルトの名無しさん mailto:sage [04/11/21 21:07:49]
>>456
MSBuild使え

460 名前:デフォルトの名無しさん mailto:sage [04/11/22 00:01:46]
>>457
個人的にはAWKと(ry



461 名前:デフォルトの名無しさん mailto:sage [04/11/22 02:57:27]
>>456
次世代標準なんかじゃないけど、jamとかどうですか?
ttp://www.freetype.org/jam/index.html


462 名前:デフォルトの名無しさん mailto:sage [04/11/22 08:35:38]
>>457
SHELL変数をうまく使え


463 名前:デフォルトの名無しさん [04/11/22 09:26:18]


464 名前:デフォルトの名無しさん mailto:sage [04/11/23 13:13:19]
MinGWのmakeで処理していますが、

a.hpp : b.hpp

の依存関係の解決方法を教えていただけないでしょうか?


465 名前:デフォルトの名無しさん mailto:sage [04/11/23 17:01:09]
>>464
依存関係を解決するとはなんぞや?

466 名前:464 mailto:sage [04/11/23 17:45:13]
いろいろ調べていた時に、サイトで使われていた表現ですが、
間違っていたのでしたら申し訳ありません。

a.hppにおいて、
#include "b.hpp"
となっているとして、

b.hppを編集した場合、a.hppをインクルードしている各々のobj(cpp)ファイルが
その都度コンパイルされて欲しい、ということです。


467 名前:デフォルトの名無しさん mailto:sage [04/11/23 17:54:16]
>>466
gcc -MM
makedepend
このへん調べれ。>408のリンク先もけっこういいな。

468 名前:デフォルトの名無しさん mailto:sage [04/11/23 17:59:56]
ヘッダの依存関係のチェックやビルド後のリリース用スクリプト
(どっかにコピーするとか)の記述なんかもサポートしたMakefileの
フレームワークというかお手本みたいなのってどっかにないの?
0から手書きするのめんどくさ過ぎ。かといってAutoなんたらとか使いたくないし。

469 名前:デフォルトの名無しさん mailto:sage [04/11/23 18:35:14]
>>468
>ヘッダの依存関係のチェックやビルド後のリリース用スクリプト
>(どっかにコピーするとか)の記述なんかもサポートしたMakefileの
>フレームワーク
Autoなんたらはそのためにあるのだが....


470 名前:デフォルトの名無しさん mailto:sage [04/11/23 19:47:11]
>>467
早速調べてみます。有難うございます。




471 名前:466(464)=470 mailto:sage [04/11/23 19:49:50]
466(464)=470です。すいません。

472 名前:デフォルトの名無しさん mailto:sage [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 名前:デフォルトの名無しさん mailto:sage [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 名前:デフォルトの名無しさん mailto:sage [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 名前:デフォルトの名無しさん mailto:sage [05/03/02 02:20:46 ]
>>477
> srcpackage: files.txt
> srcpackage: DSTFILES=$(subst ../,package/src,$(shell cat files.txt))
> srcpackage: $(DSTFILES);

これの意味を自分で(日本語で)説明できるか?
できないなら、マニュアル見直せ。
ほかにも問題がありそうだが、まずはそこから。

479 名前:477 mailto:sage [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 名前:デフォルトの名無しさん mailto:sage [05/03/02 20:34:06 ]
>>479
srcpackage: file.txt
を「srcpackageを作るためにはfile.txtが必要」と読め。



481 名前:デフォルトの名無しさん mailto:sage [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 名前:デフォルトの名無しさん mailto:sage [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 mailto:sage [05/03/04 16:25:30 ]
>>480
すみません。以後気をつけます。

>>481
> > srcpackage: DSTFILES=$(subst ../,package/src,$(shell cat files.txt))
>この構文は、 srcpackage をターゲットとするコマンド内でのみ有効な変数の代入。

srcpackageが必要とするファイルを生成する別のルールにも
適当されるものだと勘違いしておりました。
ありがとうございます。

>>482
ありがとうございます。
こちらで試してみます。

484 名前:デフォルトの名無しさん mailto:sage [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 名前:デフォルトの名無しさん [2005/04/27(水) 22:07:37 ]
sconsってどう
www.scons.org/

487 名前:デフォルトの名無しさん mailto:sage [2005/05/16(月) 15:24:34 ]
nmakeの使い方を教えてください 

488 名前:デフォルトの名無しさん mailto:sage [2005/05/16(月) 23:14:49 ]
>>487 www.google.co.jp/search?q=nmake

489 名前:デフォルトの名無しさん mailto:sage [2005/06/05(日) 19:59:57 ]
MSのnmakeって「this is Not gMAKE」の略称だっけ?

490 名前:デフォルトの名無しさん mailto:sage [2005/06/08(水) 13:08:56 ]
GNU make で、複数のターゲットを更新するアクションの
カコイイ書き方教えれ。

例) トークン表とパーサ表を吐く、Bisonに対するアクション指定



491 名前:490 mailto:sage [2005/06/08(水) 13:15:14 ]
「コマンド連鎖の缶詰を定義する」の章に載ってた
分かりづらいよマニュアル......orz......

492 名前:デフォルトの名無しさん mailto:sage [2005/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 mailto:sage [2005/06/12(日) 00:28:58 ]
> $(TARGET) : $(OBJS)
> $(FC) -o $@ $(OBJS)

訂正です。
$(TARGET) : $(OBJS)
<---Tab--->$(FC) -o $@ $(OBJS)
です。

494 名前:492 mailto:sage [2005/06/12(日) 00:31:30 ]
更に訂正っす。
> SRCS = $(SHELL *.f90)
> OBJS = $(SRCS:.f90=.o)

SRCS = $(SHELL ls *.f90)
OBJS = $(SRCS:.f90=.o)

の間違いです。
何度もすいません。

495 名前:デフォルトの名無しさん mailto:sage [2005/06/12(日) 12:02:03 ]
>>492-494 www.gnu.org/software/make/manual/html_node/make_29.html

496 名前:492 mailto:sage [2005/06/12(日) 14:51:16 ]
レスありがとうございました。

$(wildcard *.f90)
先ほど試してみましたが、これも存在してませんでした。

他に何か手法があればご紹介お願いいたします。

497 名前:495 mailto:sage [2005/06/12(日) 14:59:24 ]
>>496 GNU make が使えない環境か。読み間違えてたよゴメン。

498 名前:デフォルトの名無しさん mailto:sage [2005/06/12(日) 15:26:42 ]
>492
Makefile を修正するシェルスクリプトを作成してそれを実行するようにすれば?

499 名前:デフォルトの名無しさん mailto:sage [2005/06/12(日) 15:35:01 ]
>>498
そしてconfigureにたどりつきAutomakeがワイルドカードに未対応に気付くとか


500 名前:492 mailto:sage [2005/06/12(日) 16:12:12 ]
>>498
そうですね。最終的にはそうなってしまう可能性もあります。

別途
echo "SRCS = \" > list.mk
ls *.f90 >> list.mk
のようにしてから(正確には.「f90」を「.f90 \」への置換もしてますが)
Include list.mk
とすることでうまくいくことは可能なんですが、

Makefile単体で何とか出来ればなぁ、と思ったので
ご相談しました。
もし何かアイデアあればご教授ください。

なければ、こんな手法でやるしかないっすね。







501 名前:デフォルトの名無しさん mailto:sage [2005/06/14(火) 20:53:36 ]
>>500
Sconsというのがあるけど、Python必須らしいです。
www.scons.org/doc/HTML/scons-user.html
意外と便利そうです。
import glob
files = glob.glob(wildcard)

502 名前:デフォルトの名無しさん mailto:sage [2005/07/21(木) 13:55:49 ]
antなbuild.xmlをMakefileに移植してるんですが、
ディレクトリ移って作業するにはどうしたらよいんでしょう。

cd hoge; だと、その行のコマンドしか駄目ですし。
移るディレクトリにまた、Makefile作っておいて、
さらにmake呼ぶのがmake流なんでしょうか

503 名前:デフォルトの名無しさん [2005/07/21(木) 13:57:08 ]
ageます

504 名前:デフォルトの名無しさん mailto:sage [2005/07/21(木) 19:17:41 ]
>>502
>移るディレクトリにまた、Makefile作っておいて、
>さらにmake呼ぶのがmake流なんでしょうか
automakeでmakeファイル作るときは
そんな風にするのが一般的だと思う
「make流か」と言われれば
?


505 名前:デフォルトの名無しさん mailto:sage [2005/07/21(木) 20:17:33 ]
ん?cdで移動しても問題ないだろ

506 名前:デフォルトの名無しさん mailto:sage [2005/07/22(金) 00:51:40 ]
>>502
 cd hoge; \
 do_something; \
 do_anotherthing

507 名前:デフォルトの名無しさん [2005/08/14(日) 18:17:10 ]
mingwのmake.exeについて質問です。

include に渡すファイル名に半角スペースが入ってた場合、
¥マークでエスケープしないとダメっぽいんですが、
makeの変数に半角スペースの前に¥マークを置く方法ないでしょうか?

↓これをやってみたんですが無理でした。
$(subst \ ,\\\ , $(VALUE))

または include に半角スペースを含むファイルパスを渡す方法が無いでしょうか?
ちなみに "" で囲ってみたんですがダメでした。

508 名前:デフォルトの名無しさん mailto:sage [2005/08/15(月) 13:21:52 ]
半角スペースを含むパスを使わない。

509 名前:デフォルトの名無しさん mailto:sage [2005/08/15(月) 15:16:58 ]
超ダサっ!

510 名前:デフォルトの名無しさん mailto:sage [2005/08/15(月) 17:30:57 ]
INCLUDE=-I"path 1" -I"path 2"
ふつうにできるょ?



511 名前:507 [2005/08/17(水) 23:01:21 ]
返信あざっす!

>>508
今から僕のコンパイル作業ディレクトリを変えるのはちょっと・・・

>>509
俺か!?俺のことか!?

>>510
makefile から makefile をインクルードする時のパスですにょん

-include xxxxx.mk

www.ecoop.net/coop/translated/GNUMake3.77/make_toc.jp.html#TOC15

512 名前:デフォルトの名無しさん mailto:sage [2005/08/18(木) 00:47:12 ]
>>511
> 今から僕のコンパイル作業ディレクトリを変えるのはちょっと・・・
includeされる側のディレクトリとは関係ないんじゃないの?
相対パスで指定するとかsymlink張ってみるとか、なんか工夫してみ。


513 名前:デフォルトの名無しさん mailto:sage [2005/08/18(木) 04:49:48 ]
>>507
mingwのmakeってcygwin使わないんだっけ?
cygwinのmakeならこんなんで逃げれるけど。
-include $(shell cygpath -m $$(cygpath -d $(VALUE)))

514 名前:507 [2005/08/18(木) 23:29:14 ]
www.ecoop.net死んじゃったか(´∀`;)
makeの解説よかったのに…勿体無い。

>>512
winなんでsymlinkは無理っす。
相対パスは切実にしたいんだけど、makeの組込定数の$(CURDIR)を使いたいもので、
これが絶対パスを返すので相対パスにできないんですよね・・・。

>>513
cygwinはいれてないなぁ(´∀`;)


まあ、なんとかしてみます。
>>512-513ありがとう。

515 名前:507 [2005/08/18(木) 23:39:30 ]
というかマイドキュメント(C:\Documents and Settings\xxxx)の配下でコンパイルするのがいけないのか・・・。
いや、でもあきらめたくない。

516 名前:デフォルトの名無しさん mailto:sage [2005/08/19(金) 02:18:52 ]
windowsだと短い名前とか使えなかったっけ?
DOCUME~1 みたいなやつ。たしかdir /xで見れたような。
あるいはsubstを使ってみるとか。

517 名前:516 mailto:sage [2005/08/19(金) 02:20:34 ]
substはシェルのコマンドのsubstね

518 名前:デフォルトの名無しさん mailto:sage [2005/08/19(金) 13:43:07 ]
>>514
WinNT移行でNTFSならシンボリックリンクできるよ。
「ジャンクション」或いは"symlink-1.02.zip"で検索して味噌。

519 名前:デフォルトの名無しさん mailto:sage [2005/08/19(金) 13:58:59 ]
NTFSの仕様は糞だよな

520 名前:507 [2005/08/21(日) 01:39:22 ]
>>516
短い名前かぁ。盲点ですた。

>>518
まじっすか

>>519
シンボリックリンクに慣れるとねぇ。あれは便利すぎ。
でも、NTFSにもシンボリックリンクは実装してないだけで、
データ構造の中には予約としてあるっぽいよ



521 名前:507 mailto:sage [2005/08/21(日) 01:40:59 ]
やば。age設定になってた。ゴメス(^ω^;)

522 名前:デフォルトの名無しさん mailto:sage [2005/08/23(火) 12:19:05 ]
>>520
だからね、ディレクトリに関してはジャンクションはディフォルトで使えるんですよ。
ファイルに対するジャンクションが意図的に禁止してあるだけで。
生半可な知識で語るくらいなら>518に書かれているツールの作者のページを読んできな。

523 名前:デフォルトの名無しさん mailto:sage [2005/08/23(火) 13:28:11 ]
絶対パスで格納するうんこ仕様

524 名前:デフォルトの名無しさん [2005/08/28(日) 19:09:51 ]
makeでsrcディレクトリのソースを
binディレクトリに展開するにはどうしたらよいですか?


525 名前:デフォルトの名無しさん [2005/08/28(日) 19:19:06 ]
間違えた
srcディレクトリのソースをコンパイルして
生成物をbinディレクトリに展開したいんです

526 名前:デフォルトの名無しさん mailto:sage [2005/08/28(日) 20:53:45 ]
展開ってどういう意味?

527 名前:デフォルトの名無しさん mailto:sage [2005/08/28(日) 21:02:30 ]
配置って意味でそ

528 名前:デフォルトの名無しさん mailto:sage [2005/08/28(日) 21:15:23 ]
コピーしたいだけなら、普通に copy とか、cp とかすりゃいいんじゃねーの?

529 名前:デフォルトの名無しさん mailto:sage [2005/08/28(日) 21:37:51 ]
>>524

「cd bin」でbinディレクトリに移動してからコンパイルすればいい。
../srcディレクトリをVPATH等で指定してやれば問題はないはず。


530 名前:デフォルトの名無しさん mailto:sage [2005/08/30(火) 09:09:34 ]
パスと%使ったらうまくできた。
これでターゲットファイル名とソースファイル名のみを書いてやるだけで
自動でオブジェクトファイルだのを別ディレクトリに展開してくれるようになった。
お騒がせして申し訳ない。



531 名前:デフォルトの名無しさん mailto:sage [2005/10/24(月) 15:09:12 ]
同じディレクトリで2つのmakeファイルを作成する方法はないですか?

1つめのプログラムをmakeのち実行した後に、2つめのプログラムをmakeのち実行をしたいのですが。
ちなみにcを使っています。

532 名前:デフォルトの名無しさん [2005/10/24(月) 15:09:47 ]
ageさせていただきます。

533 名前:デフォルトの名無しさん mailto:sage [2005/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 名前:デフォルトの名無しさん mailto:sage [2005/10/24(月) 23:25:09 ]
>>531
make -f 使えばいいんじゃないの?

535 名前:デフォルトの名無しさん mailto:sage [2005/10/24(月) 23:26:55 ]
>>533
$(notdir ...)

536 名前:ミャケでございます mailto:sage [2005/10/25(火) 10:39:38 ]
>>535
ありがとうございます。うまくいきました。

537 名前:デフォルトの名無しさん [2005/11/04(金) 08:43:29 ]
$(CC) $(CFLAGS) -o $@ $<

$(CC) $(CFLAGS) -o $< $<
って書き間違えた……

ヘッダ以外全て消え去ったよ

svnで管理してたから古い状態で復活できたけど、
10個近く新しいファイルを作ってた。
復活できたファイルも変更点がかなりあった……

538 名前:デフォルトの名無しさん mailto:sage [2005/11/04(金) 10:30:57 ]
>>537
デフォルトの規則をそのまま使えばいいのに…

539 名前:デフォルトの名無しさん mailto:sage [2005/11/04(金) 11:30:34 ]
>>538
VPath使ってたら明示せざるを得なくなった

コンパイラの切り替えとか含めててディフォルトルールじゃ対応しきれなくなってた

540 名前:デフォルトの名無しさん mailto:sage [2005/11/12(土) 21:10:42 ]
下記のような makefile で make X.a を実行した場合に,x.b y.b z.b が表示
されて欲しいのですが,表示されません.

調べて見た感じでは,「%.a: $($(basename $@))」の $@ が空になってしまう
みたいなのですが,これを動くようにする方法はありますか?

エッセンスだけを取り出したのでやや不自然な記述になってしまっていますが,
要は型ルールの依存ファイルに,マッチした語幹を使用したいってことです.

ただし,実際には X.b に相当する記述がたくさんあるので,下記のような記述
は避けたいと考えています.また,$(eval ) バグがあるので $(eval ) の使用
も避けたいと考えています.



541 名前:540 [2005/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 名前:デフォルトの名無しさん mailto:sage [2005/11/29(火) 15:29:14 ]
>>17にある質問と同じ内容なのですが
1ソースファイルから1実行ファイルを作るだけの処理を
一気にまとめてやるにはどういう風にmakeをかけば良いでしょうか?

543 名前:デフォルトの名無しさん mailto:sage [2005/11/29(火) 17:37:05 ]
ALL: ari.exe ori.exe haberi.exe imasokari.exe

544 名前:デフォルトの名無しさん mailto:sage [2005/11/29(火) 21:42:02 ]
>>543
ありがとうございます。
環境の違いを書くのを忘れ申し訳ありません。
とりあえずallで指定しておくんだなと思って、こう書くことにしました。
とりあえず動いていますが、なんかおかしいところがあればご指摘ください。

CC = gcc
TARGET := $(patsubst %.c,%,$(wildcard *.c))
all : $(TARGET)
% : %.c
$(CC) -o $* $<


545 名前:デフォルトの名無しさん mailto:sage [2005/11/29(火) 21:47:33 ]
追加。。。

環境はFedora Core 4、gcc 4.0.1、GNU Make 3.80でCのプログラムです。

546 名前:デフォルトの名無しさん [2005/12/27(火) 13:12:32 ]
オライリーからmake3版でたお

547 名前:デフォルトの名無しさん mailto:sage [2005/12/27(火) 19:22:30 ]
この間、第2版買ったばかりの俺に対するイジメだな。

548 名前:デフォルトの名無しさん [2005/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 名前:デフォルトの名無しさん mailto:sage [2005/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 mailto:sage [2005/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 名前:デフォルトの名無しさん mailto:sage [2005/12/29(木) 21:50:13 ]
VPATH

552 名前:549 mailto:sage [2005/12/30(金) 00:17:51 ]
>>550
一番最初は .o ファイルが存在しないから、
ヘッダの依存関係に関係なくコンパイルが必要なことがわかる。

553 名前:548 mailto:sage [2005/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 名前:デフォルトの名無しさん [2006/03/01(水) 23:24:01 ]
別ディレクトリにあるファイルを関連付けする方法ってないですか?
例えば、ソースがカレントディレクトリ、出力が一つ下のディレクトリだと、

SRC = $(wildcard *.hoge)
DEST = $(addprefix ../,$(SRC:.js=.mage))

.SUFFIXES: .hoge .mage
all: $(DEST)

.hoge.mage:
 @echo $@ $<

では上手くいきません・・・
.hoge../.mageみたいに関連付けられないのかなあ

555 名前:デフォルトの名無しさん [2006/03/01(水) 23:28:01 ]
ちなみに、いまは、現在のディレクトリに出力して、下のディレクトリにコピーしてます。

556 名前:デフォルトの名無しさん mailto:sage [2006/03/02(木) 00:05:11 ]
>>554
パターンルール使え。 % 入ってるやつ。

DEST の定義で .js ってなってるのは書き込み時の間違いか?
あと ../ は一つ上のディレクトリだと思う。

557 名前:デフォルトの名無しさん [2006/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 名前:デフォルトの名無しさん mailto:sage [2006/03/18(土) 08:08:37 ]
gnu makeでローカルなサッフィクスルールを作りたいのですが、
事情があって生成ファイルにhoge.foo.etcのように複数のピリオドを持たせています。
適切なやり方がありましたら教えてください。


559 名前:デフォルトの名無しさん mailto:sage [2006/03/18(土) 18:31:43 ]
>>558
パターンルール使え。 % 入ってるやつ。

560 名前:デフォルトの名無しさん [2006/03/20(月) 17:23:30 ]
Visual C++とC++Builderのmakeを両方とも使いたいのですが、どうやったらうまく切り替えられるでしょうか?



561 名前:デフォルトの名無しさん [2006/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 名前:デフォルトの名無しさん mailto:sage [2006/03/21(火) 02:51:13 ]
>>560
なにに困ってるのかサッパリわからん。
普通に使い分けられるだろ?

563 名前:デフォルトの名無しさん [2006/03/21(火) 15:51:15 ]
>>560
ん?VisualC++て、nmakeだから、Borlandのmakeとはコマンド違うくない?

564 名前:デフォルトの名無しさん mailto:sage [2006/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 名前:デフォルトの名無しさん mailto:sage [2006/03/24(金) 07:50:49 ]
コンパイルオプションが違うからwww

566 名前:デフォルトの名無しさん mailto:sage [2006/03/24(金) 14:19:56 ]
>>564
お前のその -O3 は一体何なんだと。

567 名前:デフォルトの名無しさん mailto:sage [2006/03/24(金) 16:57:22 ]
おっさん

568 名前:デフォルトの名無しさん mailto:sage [2006/03/24(金) 18:32:38 ]
90°傾いたウサギ風船

569 名前:デフォルトの名無しさん mailto:sage [2006/03/26(日) 02:16:20 ]
1つのMakefile で複数の exe に対応することってきますか?
1 cpp -> 1 exe で。
現状ほぼ同じ Makefile をコピーして指定したソースファイルの名前を編集してやっているのですが、
非常にめんどくさいです。

もし可能ならばさらに、カレントディレクトリにある cpp をワイルドカードばりに取得して、
a.cpp -> a.exe のようにコンパイルしていきたいです。
よろしくおねがいします。

570 名前:デフォルトの名無しさん mailto:sage [2006/03/26(日) 02:24:54 ]
>>569 >>559



571 名前:デフォルトの名無しさん mailto:sage [2006/03/26(日) 02:28:58 ]
てゆーか、make a.exe でデフォルトルールで作られるだろ。Makefile無くても。
違ったっけ?

572 名前:569 mailto:sage [2006/03/26(日) 08:42:02 ]
さぱーりわからん。
SRCS = hoge.cc mage.cc #もしくは $(wildcard *.cc) ?
EXES = $(SRCS:.cpp=.exe)
OBJS = $(SRCS:.cpp=.obj)
ときてさてどうすれば?

573 名前:デフォルトの名無しさん mailto:sage [2006/03/26(日) 08:45:06 ]
>>572 >>559

574 名前:569 mailto:sage [2006/03/26(日) 10:10:31 ]
%.o : %.cc
        $(CC) -c $(CFLAGS) $(CPPFLAGS) $< -o $@
みたいにかいてもなんにもならないYO.
%.cc の値がどこからくるのかさぱーりわからん。

575 名前:デフォルトの名無しさん mailto:sage [2006/03/26(日) 10:14:29 ]
>>574
書いただけじゃ何も起こらないよ。
ゴールを指定して make を実行しないとね。

576 名前:569 mailto:sage [2006/03/26(日) 10:19:29 ]
>>575
make hoge.o
とやれってこと?
一度の make で全部一気にやりたいって質問だったんだけど。
読み直してみたら、たしかに書いてないな orz

577 名前:デフォルトの名無しさん mailto:sage [2006/03/26(日) 10:53:20 ]
>>576
make がどう動くのか、わかってないんじゃないか?
その状態じゃどうやっても無駄だぞ。

578 名前:569 mailto:sage [2006/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 名前:デフォルトの名無しさん mailto:sage [2006/03/26(日) 12:43:00 ]
>>578 >>559

580 名前:デフォルトの名無しさん mailto:sage [2006/03/26(日) 13:15:06 ]
>>579
さぱーりわからん。



581 名前:デフォルトの名無しさん mailto:sage [2006/03/26(日) 13:20:17 ]
>>580
俺もお前が何がわからんのか、さぱーりわからん。
とりあえず >>578 をパターンルール使って書き変えて動かなかった Makefile 晒せ。

582 名前:デフォルトの名無しさん mailto:sage [2006/03/26(日) 15:28:00 ]
%.exe: %.cpp
と書いてやれよ
からかってるんだろうけど不親切にもほどがある

583 名前:デフォルトの名無しさん mailto:sage [2006/03/26(日) 16:40:05 ]
>>578
SRCS=$(wildcard *.cpp)
all: $(SRCS:.cpp=.exe)
%.exe: %.cpp
gcc $< -o $@


584 名前:デフォルトの名無しさん mailto:sage [2006/03/26(日) 19:54:01 ]
>>582-583
必要な情報はそろっているのに、それだけのものを作れないのは何故か、
知りたかったんだ。スレ汚しスマンね。

585 名前:デフォルトの名無しさん mailto:sage [2006/03/27(月) 23:19:08 ]
>>559
Thx.
お猿の訳本しか持ってないんでよくわかんなかったけど、
gmakeのマニュアルをちゃんと読むことにします。
www.ipp.mpg.de/~dpc/gmake/make_93.html

586 名前:デフォルトの名無しさん [2006/04/13(木) 01:08:07 ]
gcc では、-Dマクロ指定が出来ますが、make 実行時に、外からマクロ指定を
したいと思って、make -DAAA=aaa とかやってもエラーになります。
こういうことはできないでしょうか?


587 名前:デフォルトの名無しさん mailto:sage [2006/04/13(木) 01:10:04 ]
>>586
make CFLAGS="-DAAA=aaa"
だったような


588 名前:デフォルトの名無しさん mailto:sage [2006/04/13(木) 01:12:09 ]
ありがとうございました

589 名前:デフォルトの名無しさん mailto:sage [2006/04/22(土) 23:02:52 ]
makeしたら負けかなと思っている

590 名前:デフォルトの名無しさん [2006/05/12(金) 02:30:57 ]
rake使ってる人いる?



591 名前:デフォルトの名無しさん mailto:sage [2006/05/12(金) 03:23:14 ]
スレタイいいね。
そういう英語の言い回しがあるのかと思ったけど>>1のオリジナルなのか。

592 名前:デフォルトの名無しさん mailto:sage [2006/05/12(金) 23:36:57 ]
Ruby初心者スレより転載
shakenbu.org/yanagi/d/20050214.html#p02

593 名前:デフォルトの名無しさん mailto:sage [2006/05/13(土) 14:44:26 ]
ダセエ名前だな
なんでも頭文字にRつけりゃいいと思ってやがる

594 名前:デフォルトの名無しさん mailto:sage [2006/05/13(土) 15:01:29 ]
ほのぼのRake

595 名前:デフォルトの名無しさん [2006/05/13(土) 21:43:16 ]
MakefileならぬRakefileだしなw
まあでもRuby信者の俺には、けっこう便利よ
Rubyに集中できるし

596 名前:デフォルトの名無しさん mailto:sage [2006/05/13(土) 23:32:46 ]
makeとantだけでお腹いっぱいです。


597 名前:デフォルトの名無しさん [2006/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 [2006/06/01(木) 19:13:49 ]
どんなことがやりたいかというと、

hoge.foo moge.foo: hoge.txt moge.txt
  xyzzy $< $@

みたいに書くと、hoge.fooとhoge.txtが、moge.fooとmoge.txtがそれぞれ対応してくれないかなー
ということです。

599 名前:デフォルトの名無しさん mailto:sage [2006/06/01(木) 20:49:14 ]
>>597
>.foo: .txt というサフィックスルールは使えません。
何で?
「.foo は .txt から作る」
「.hoge も .txt から作る」
でいいんじゃ…?

600 名前:597 [2006/06/01(木) 22:02:56 ]
あー、いや、
同時に、test.txtからtest.fooを、qwertyというツールで作りたかったりするんです。
# もしくは、xyzzyツールの別のオプションで、と読み替えられてもかまいません
そうなると、サフィックスルールだと、hoge.txtもtest.txtも同じように扱われちゃって。

言葉足りなかったですね。




601 名前:デフォルトの名無しさん mailto:sage [2006/06/02(金) 00:53:55 ]
>>597
FOO_FROM_TXT=hoge.foo moge.foo
$(FOO_FROM_TXT) : %.foo : %.txt
  xyzzy $< $@

602 名前:597 [2006/06/02(金) 01:01:45 ]
>>601
すげえ!
と思ったけどできませんでした orz

make: *** No rule to make target hoge.txt needed by hoge.foo
みたいに言われました。
gnu makeだと駄目?

こういう機能って、どっかに書いてありますのン?

603 名前:デフォルトの名無しさん mailto:sage [2006/06/02(金) 01:04:40 ]
>>602
hoge.txt はあるのか?ファイルがないんじゃないの?

これはスタティックパターンルールっていう構文。
www.gnu.org/software/make/manual/html_node/Static-Pattern.html

604 名前:597 [2006/06/02(金) 01:28:17 ]
簡単なテストプロジェクト作ったら、>>601で、うまく動いた
んー、本プロジェクトで動かないのは、別な要因があるようです(´・ω・`)
探ってみます。

>>603
マニュアルにもちゃんとあるんですね。サンクスです。

605 名前:597 [2006/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 [2006/06/02(金) 02:09:33 ]
違ってました orz
hoge_foo_bar.txt→hoge_test_bar.foo
moge_foo_bar.txt→moge_test_bar.foo

でした。

607 名前:597 [2006/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 [2006/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 名前:デフォルトの名無しさん mailto:sage [2006/06/02(金) 09:31:03 ]
>>608
% はいっこじゃないとだめ。いっこなら、頭でも途中でもいい。

610 名前:597 [2006/06/02(金) 19:23:49 ]
了解です。

ファイル名変更して、
%test.foo: %foo.txt
で、いこうと思います。



611 名前:デフォルトの名無しさん mailto:sage [2006/07/22(土) 23:36:57 ]
>>1
超いまさらだけど、スレタイ、せっかくだから頭文字mで統一したら?
make makes a massive mess
とか。

612 名前:デフォルトの名無しさん mailto:sage [2006/07/22(土) 23:50:02 ]
>>611
語呂が悪い。
make makes many messes のほうがいいかな。

613 名前:デフォルトの名無しさん [2006/08/01(火) 14:00:24 ]
暗黙ルールを使うと

ルール連鎖の中で生成された中間ファイルはmakefileにより特別扱いされる。
中間ファイルはターゲットとしては現れず、削除される。

という動作になりますが、これが明示的ルールと同様の動作になるやり方を教えてください。

つまり、
1. 中間ファイルがそのまま残る。
2. (全然別系統もしくは手動による)中途ファイルの変更があったときは、
その中間ファイルからmake処理が行われる。
というようにしたいのです。

614 名前:デフォルトの名無しさん mailto:sage [2006/08/01(火) 15:09:19 ]
>>613
何か勘違いしてると思うよ。
中間ファイルは削除されたんじゃなくて、もともと無かったんだよ。

615 名前:デフォルトの名無しさん mailto:sage [2006/08/01(火) 21:03:34 ]
>>614
makeを実行すると、こちらの書いたルール通りに実行し、
directoryに中間ファイルがたくさん作られているのが見えます。
また、最後に
rm hoge huge .........
と中途で生成された大量のファイルをrmしているのが見えます。

616 名前:デフォルトの名無しさん mailto:sage [2006/08/01(火) 21:57:56 ]
>>615
それは「暗黙のルール」じゃないんじゃないか?
make -pして、何が問題なのかもう一度考えてみるべし。

617 名前:デフォルトの名無しさん mailto:sage [2006/08/01(火) 23:29:50 ]
>>613
暗黙ルール使わなけりゃいいんじゃね?

618 名前:k ◆WFGp1NZuiw mailto:sage [2006/08/03(木) 21:43:19 ]
.PRECIOUS を使うとか.
www.ecoop.net/coop/translated/GNUMake3.77/make_4.jp.html#SEC35

619 名前:デフォルトの名無しさん [2006/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 名前:デフォルトの名無しさん mailto:sage [2006/09/03(日) 21:32:12 ]
>>619
これじゃ駄目か?

%.x:
  command1
  command2
  command3



621 名前:デフォルトの名無しさん mailto:sage [2006/09/03(日) 21:40:54 ]
>>620
それだと$<が空っぽで使えませんでした。
commandの中で$<と$@を参照してます。

622 名前:デフォルトの名無しさん mailto:sage [2006/09/03(日) 21:46:00 ]
>>621
じゃ、続けて
%.x: %.abc
%.x: %.def
%.x: %.ghi
って追加すると、解決できないかね?

駄目だったら define 使えばいいんだけどね。

623 名前:デフォルトの名無しさん mailto:sage [2006/09/03(日) 21:53:35 ]
>>622
それだと %.x: %.ghi だけルールが設定されて、
他のルールはコマンドなしのためにキャンセルされないですか?

624 名前:デフォルトの名無しさん mailto:sage [2006/09/03(日) 21:54:44 ]
>>623
コマンドなしのルールはキャンセルされるって、どこで仕入れたガセネタだ?

625 名前:デフォルトの名無しさん mailto:sage [2006/09/03(日) 22:07:33 ]
>>624
勘違いでした。暗黙のルールをキャンセル方法でした.
結局>>622の方法でも $< は空っぽでした。

626 名前:デフォルトの名無しさん mailto:sage [2006/09/03(日) 22:16:37 ]
>>625
実際の依存関係を設定してないんじゃないか?

%.x:
 echo $@ $<

に続けて

a.x: a.abc

と書けば a.x a.abc が出力されるだろう。

627 名前:デフォルトの名無しさん mailto:sage [2006/09/03(日) 22:38:51 ]
>>626
ファイル一つ一つ書かないとダメですか?

628 名前:デフォルトの名無しさん mailto:sage [2006/09/03(日) 22:40:41 ]
>>627
スタティックパターンルールでもいいぞ。
$(ABC_X_FILES) : %.x : %.abc
$(DEF_X_FILES) : %.x : %.def

629 名前:デフォルトの名無しさん mailto:sage [2006/09/03(日) 22:58:20 ]
>>628
ありがとうございます。できました。

630 名前:デフォルトの名無しさん [2006/09/04(月) 00:15:41 ]
makeから、rakeに乗り換えた。
Ruby使いには、rakeはいいねえ。



631 名前:デフォルトの名無しさん mailto:sage [2006/09/15(金) 17:22:16 ]
mingw + GNU make + コマンドプロンプトを使っとる

make[1]: Entering directory ...
の後に表示されるディレクトリ名を絶対パスから相対パスにしたいんだがどうしたらいい?
結果が長くてうっとうしい
うっとうしい以外に害は無いんだけどね

632 名前:デフォルトの名無しさん mailto:sage [2006/09/15(金) 17:54:27 ]
そういうパッチあてなされ

633 名前:631 mailto:sage [2006/09/16(土) 01:52:48 ]
>>632
やっぱ大元に手を加えないとダメか
パッチ見つからんからソース眺めてみるわ・・・
どうもありがとう

634 名前:デフォルトの名無しさん mailto:sage [2006/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 名前:デフォルトの名無しさん [2006/09/17(日) 16:43:39 ]
emacsでMakefile中でもCtr-C,Cを押したらコンパイルする技を
昔ネットで見たのですが忘れてしまいました。
どなたか教えてくれませんか?


636 名前:デフォルトの名無しさん mailto:sage [2006/09/17(日) 16:52:16 ]
>>635
(add-hook
'makefile-mode-hook
'(lambda ()
(local-set-key "\C-cc" 'compile)
))


637 名前:デフォルトの名無しさん mailto:sage [2006/09/17(日) 17:05:23 ]
>>631

そういうフィルタを書くというのは、よくやるなぁ。
ついでに注意すべき warning なんかを強調してみたりとか。


638 名前:デフォルトの名無しさん mailto:sage [2006/09/29(金) 00:41:47 ]
>>630
rakeの日本語の資料はどこを見ればいいのかな?
機能をmakeと対比してあるとありがたい。特に再帰処理関係で。

639 名前:k ◆WFGp1NZuiw mailto:sage [2006/09/30(土) 22:40:57 ]
>>638
www.dodgson.org/omo/t/?date=20060901

640 名前:デフォルトの名無しさん mailto:sage [2006/10/04(水) 23:08:34 ]
>>636
ありがとう。これでコンパイルが大分楽になる。
lispわかんないと一流のプログラマーにはなれないな。
がんばるよ。



641 名前:デフォルトの名無しさん [2006/10/20(金) 21:26:55 ]
lispの出来損ないみたい>>makeの文法

642 名前:デフォルトの名無しさん [2006/10/21(土) 06:04:16 ]
lisp厨乙

643 名前:デフォルトの名無しさん [2006/10/27(金) 12:04:18 ]
一応確認、まぁ誤植だと思うけど

GNU MAKE
ttp://www.amazon.co.jp/GNU-Make/dp/4873112699/

7章 ポータブルなmakefile P129
・・・次に各プラットフォームごとにどういったツールが使えるのか明らかにし、どれを使うのか
明らかにしなくてはいけません。対象となるすべてのプラットフォームで利用可能なツールや機能だけを
使うのが究極の姿です。これは「最小公倍数方式」と呼ばれ・・・

数学しなくなってだいぶたつし、原文読んでないけど、
これって「最小公倍数」じゃなくて「最大公約数」だよな?

644 名前:デフォルトの名無しさん mailto:sage [2006/10/27(金) 15:17:43 ]
>>643
原文見てないけど、「最小公分母」の誤訳でしょ。


645 名前:デフォルトの名無しさん mailto:sage [2006/10/29(日) 19:04:49 ]
nmakeってsubstとかpatsubstに相当するものないの?

646 名前:デフォルトの名無しさん mailto:sage [2006/12/02(土) 23:58:48 ]
暗黙のルールで
hoge.cc -> hoge.o -> hoge
の順番に作りたい時、
hoge.o -> hoge
のときにg++じゃなくてccになっちゃうんだけど、
これってCC=g++にしておくしかない?

647 名前:デフォルトの名無しさん mailto:sage [2006/12/03(日) 10:32:31 ]
>>646 何が不満だ?

648 名前:646 mailto:sage [2006/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 名前:デフォルトの名無しさん mailto:sage [2006/12/04(月) 10:29:19 ]
man gccしてみろ。


650 名前:デフォルトの名無しさん mailto:sage [2006/12/05(火) 14:55:28 ]
>>648
ccでリンクできてるなら、それでまったく問題ない。
g++のときは暗黙に -lstdc++ がつくだけ。




651 名前:デフォルトの名無しさん [2007/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 名前:デフォルトの名無しさん mailto:sage [2007/01/05(金) 01:32:28 ]
それは make でなくシェルスクリプトの話かと。
for i in *.cpp; do grep COMMENT $i > `echo $i|sed -e 's/\.cpp/.log/'`;done
とか。

653 名前:デフォルトの名無しさん mailto:sage [2007/01/05(金) 10:41:05 ]
拡張子がcppとlogに決まっているなら、サフィックス・ルールを使用する方法もある。
www.ecoop.net/coop/translated/GNUMake3.77/make_10.jp.html#SEC102

654 名前:デフォルトの名無しさん [2007/02/13(火) 22:23:13 ]
rakeってC++をmakeできますか?


655 名前:デフォルトの名無しさん mailto:sage [2007/02/14(水) 19:27:32 ]
          ___/ 冫   ∧_∧
 ∧_∧  _ __ (_    /   (´∀` )
 ( ´∀`)/ ) )  |   |    //   \
 (  ⊃/ //  ∧_∧    (__(_/`  |
  \__//    ( ´∀`)       _///
       ̄     ∪ ̄∪      (__(__)

656 名前:デフォルトの名無しさん [2007/02/15(木) 03:19:04 ]
>>654
makeの意味わかってる?

gccでコンパイルとか言うのなら、rakeでできるよ。
Makefileがあって、それをmakeしたいのなら、rakeではできない。
makeを使おう。

657 名前:デフォルトの名無しさん mailto:sage [2007/02/15(木) 20:52:50 ]
makeは簡単だけどautotoolが全然わからねえ。
まじむずい。autoconf、automake、Makefile.am
Makefile.in、configure.inまじややこい。

658 名前:デフォルトの名無しさん mailto:sage [2007/02/15(木) 22:43:13 ]
>>657
最初は手書きMakefileでいいさ。


659 名前:デフォルトの名無しさん mailto:sage [2007/02/18(日) 04:52:13 ]
おれもmakeはいいけどautotoolsキライ
makeごと捨て去ってもいいんだけど
なんか他にいいビルドツールないかな?


660 名前:デフォルトの名無しさん mailto:sage [2007/02/18(日) 11:07:14 ]
階層が錯綜してるときのmakeって書くのにうんざりするんだけど、
もっと楽ちんなものないのかなあ。





661 名前:デフォルトの名無しさん mailto:sage [2007/02/18(日) 13:27:03 ]
rakeとantくらいしかとっさには思い出せないな……


662 名前:autoXXの癌はlibtoolだと思う mailto:sage [2007/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 名前:デフォルトの名無しさん mailto:sage [2007/03/20(火) 05:00:53 ]
仕事でjam使ってます。サッパリわかりません


664 名前:デフォルトの名無しさん [2007/04/24(火) 17:30:42 ]
Rake
www2s.biglobe.ne.jp/~idesaku/sss/tech/rake/index.html

rakeの日本語資料が少ないので、ここいいですね。

665 名前:デフォルトの名無しさん mailto:sage [2007/04/24(火) 20:42:09 ]
>>664
Makefileより見た目ゴチャゴチャしててなんかいやだな。


666 名前:デフォルトの名無しさん [2007/04/24(火) 21:33:43 ]
>>665
見た目も何もRubyプログラムそのものですからね

Ruby知ってたら、すごい楽できるよ

667 名前:デフォルトの名無しさん mailto:sage [2007/04/24(火) 21:34:27 ]
>>665
ゴチャゴチャしてるという印象はこのへんかね。

ターゲット(タスク)を裸で書けない(文字列かシンボルで書く)
ファイル名単独じゃなくて、いちいちfileと書く
:ではなく=>
doとかendとか付ける
外部コマンドをそのまま書けない

>>664
ダグラス・アダムズネタが混ざってるな 。



668 名前:デフォルトの名無しさん mailto:sage [2007/04/24(火) 21:46:49 ]
Cプログラマ向けにCの文法で書けるCakefile(ケーキファイル)なんての
を妄想してみたが、Rubyだとブロックで書くところを関数に抜き出さないと
いけないから書きにくいな。C++でboost使うとlambdaっぽいことができる
からマシになるのかな。


669 名前:デフォルトの名無しさん mailto:sage [2007/04/24(火) 21:50:45 ]
lakeやらpakeが強いかも。元々適当な言語だし。

670 名前:デフォルトの名無しさん mailto:sage [2007/04/24(火) 22:06:16 ]
lakefileは普通のプログラムと見かけ大差なさそう。

pはperlだろうが lispつながり(?)でprologを連想。
ホーン節って依存関係定義そのものだな。




671 名前:デフォルトの名無しさん mailto:sage [2007/04/24(火) 22:31:43 ]
dake

672 名前:デフォルトの名無しさん mailto:sage [2007/04/24(火) 23:47:56 ]
やっぱ俺Makefileでいいや・・・

673 名前:デフォルトの名無しさん [2007/04/25(水) 01:23:22 ]
delake
VBake
make#


674 名前:デフォルトの名無しさん [2007/04/25(水) 01:37:29 ]
>>634
つ♥

675 名前:デフォルトの名無しさん mailto:sage [2007/04/25(水) 15:04:25 ]
rakeで依存関係をgccに解決させたりしてるときにどう持ってくればいいんだ?


676 名前:デフォルトの名無しさん mailto:sage [2007/04/25(水) 21:31:46 ]
>>675
makedependってこと?


677 名前:デフォルトの名無しさん mailto:sage [2007/04/25(水) 21:40:32 ]
require 'rake/loader/makefile'

file '.depend.mf' => そーす do |t|
sh 'gcc -M ...'
end

import '.depend.mf'

だろうか。


678 名前:デフォルトの名無しさん [2007/04/25(水) 23:22:53 ]
>>664も参照

679 名前:デフォルトの名無しさん mailto:sage [2007/04/26(木) 10:50:56 ]
>>676-678
importで導入できるんだね、ありがと


680 名前:奉祝スレ5周年 [2007/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 名前:デフォルトの名無しさん mailto:sage [2007/08/17(金) 22:00:45 ]
普通に info に載ってるけど。
man にも簡単な説明が出てる。

682 名前:デフォルトの名無しさん [2007/08/23(木) 02:41:13 ]
このスレ見ててもグチばっかだし、ほんとにmakeって使えないと思う。
(autotools含めてバッドノウハウの塊だと思う)

何故代替品は出てこないんだろう?
オープンソース界隈で普及しすぎて、デファクトになっちゃったのが原因なのかね。
マイクロソフトの独占なんかより、makeの独占を禁止してほしい。

683 名前:デフォルトの名無しさん mailto:sage [2007/08/23(木) 02:45:27 ]
>>682
ant, bjam, rake, SCons とかは代替品とは言わんの?

684 名前:デフォルトの名無しさん mailto:sage [2007/08/23(木) 05:44:05 ]
autotoolはともかくmakeは無いと困るだろ。

685 名前:デフォルトの名無しさん mailto:sage [2007/08/23(木) 22:06:01 ]
>>682
makeも使えない奴はたいしたコードはかけないし、
make使える奴は代替の必要を感じない

そういう意味でsubversion開発者は実に偉大だ

686 名前:デフォルトの名無しさん [2007/08/26(日) 22:45:52 ]
>>682
rakeつかってる

687 名前:デフォルトの名無しさん [2007/09/05(水) 19:03:57 ]
Rakeのユーザーガイド見つけた

RakeUserGuide - Rake ユーザガイド
www.kyobashi.org/hf/RakeUserGuide/?AboutRakeUserGuide
    ___
   ,;f     ヽ
  i:         i
  |         |
  |        |  ///;ト,
  |    ^  ^ ) ////゙l゙l;   ありがたや〜
  (.  >ノ(、_, )ヽ、} l   .i .! |   ありがたや〜
  ,,∧ヽ !-=ニ=- | │   | .|
/\..\\`ニニ´ !, {   .ノ.ノ
/  \ \ ̄ ̄ ̄../   / .|

688 名前:デフォルトの名無しさん [2007/10/03(水) 18:54:33 ]
makeが成功した後に自動的にcleanを実行するようにすることはできませんか?

689 名前:デフォルトの名無しさん [2007/10/03(水) 19:00:26 ]
make allの最後に、make clean呼ぶようにするだけでは?

690 名前:デフォルトの名無しさん mailto:sage [2007/10/03(水) 19:48:03 ]
>>689
作った物消すのって何したいん?、コンパイルチェックだけ?




691 名前:デフォルトの名無しさん [2007/10/03(水) 20:25:19 ]
ただ、FreeBSDのportsシステムのmakeファイルにはうんざり

692 名前:デフォルトの名無しさん [2007/10/16(火) 09:10:29 ]
WindowsでMakefileをダブルクリックで開けるようにはできないでしょうか?

693 名前:デフォルトの名無しさん mailto:sage [2007/10/16(火) 10:52:08 ]
>>692
できるよ
ただし他の拡張子のついてないファイルもダブルクリックでmakeされちゃうけど

694 名前:デフォルトの名無しさん [2007/10/27(土) 01:05:58 ]
>>692
>>693の問題があるので、俺は、適当に、batファイル書いて、クリックしてるけど


cygwinコンソール開くの面倒な時も多々あるw

695 名前:デフォルトの名無しさん mailto:sage [2007/10/27(土) 19:15:09 ]
Makefile.mak にすりゃいいんだ

696 名前:デフォルトの名無しさん mailto:sage [2007/12/09(日) 23:42:59 ]
>>688
make all clean


697 名前:デフォルトの名無しさん mailto:sage [2007/12/24(月) 15:20:37 ]
質問させてください。
サフィックスルールで、元と後が同じ拡張子のものはかけますか?


現在画像からサムネイルを作るMakefileを作っています。
1度すべて作った後は元画像が変更されたもののみ作りなおしたいです。

現状以下のように各ファイルに対して1ルール作っています。
THUMBNAIL/001.JPG : IMG/001.JPG
  convert -geometry 150x150 IMG/001.JPG THUMBNAIL/001.JPG
THUMBNAIL/002.JPG : IMG/002.JPG
  convert -geometry 150x150 IMG/002.JPG THUMBNAIL/002.JPG

これをサフィックスルールで「.JPG.JPG : 」のように書きたいのですが、
元と後が同じだとうまくいきません。


どうかよろしくお願いします。

698 名前:デフォルトの名無しさん mailto:sage [2007/12/24(月) 15:48:00 ]
>>697
それ循環定義になるならムリだと思う。
ただ現実的な解決方法としては
jpeg と jpg にしてしまうとか。
もしくは 一旦別の拡張子のファイルを touch して
jpg -> jpg コンバートかますとかならやれそう


699 名前:デフォルトの名無しさん mailto:sage [2007/12/24(月) 15:51:55 ]
>>697
THUMBNAIL/%.JPG : IMG/%.JPG
  convert -geometry 150x150 $< $@

700 名前:697 mailto:sage [2007/12/24(月) 15:56:38 ]
>>698
ありがとうございます。

>もしくは 一旦別の拡張子のファイルを touch して
初めに思いついたのがこれだったんですけど、これだと一時ファイルをとっておく必要があるんですよね・・・

>jpeg と jpg にしてしまうとか。
これがいいですかね



701 名前:デフォルトの名無しさん mailto:sage [2007/12/24(月) 15:58:03 ]
>>697
全然サフィックスルールじゃないけど
SRCJPG = ${shell ls IMG/*.JPG}
${SRCJPG}: TUMBNAIL/%.JPG: IMG/%.JPG:
  convert -geometry 150x150 $< $@
という感じじゃダメかな。
(Windowsならlsをdirとかに変えて)

702 名前:697 mailto:sage [2007/12/24(月) 16:14:05 ]
>699,701
これだ!ありがとうございます!
うまくいきました

703 名前:デフォルトの名無しさん [2007/12/30(日) 12:19:08 ]
makeで普通.cppを修正するとそこだけコンパイルしてくれますよね?
.hを修正してもコンパイルしてくれないのですが、どうしたらいいですか?
誰か教えて

704 名前:デフォルトの名無しさん mailto:sage [2007/12/30(日) 12:22:59 ]
依存関係が足りないから。

$ g++ -MM
で出てくる依存関係をMakefileで読み込むようにしとけ

705 名前:デフォルトの名無しさん [2007/12/30(日) 13:59:11 ]
b.x: e.x
a.x: b.x c.x d.x

%.z: %.x
hoge $^

のようなルールを記述して make a.z を実行したときに,
hoge a.x b.x c.x d.x e.x
というコマンドを走らせることはかのうでしょうか?


a.z: a.x b.x c.x d.x e.x
というルールを記述することは避けたいです.

706 名前:デフォルトの名無しさん [2007/12/31(月) 15:47:10 ]
age

707 名前:デフォルトの名無しさん [2007/12/31(月) 16:53:06 ]
阪大外国語学部の椿原慎二くんは昔からゴム付けてくれませんよ。
なんか顔もゴリラなんだけど、あのときはまさに野獣になって、日本語もさえも通じなくなる。
まがりにも外国語学部イタリア専攻で行ってるんだけど、あれじゃ外国語とか言うよりもゴリラ語。
きっとボブサップもあんな感じなんだろうな。ただ椿原慎二のチンコはサップに比べると小さいし臭いけどね。



708 名前:デフォルトの名無しさん mailto:sage [2007/12/31(月) 22:50:40 ]
こ こ で も 椿 ○ 粘 着 か
年の瀬だっちゅうのに悲しくないのかね

709 名前:デフォルトの名無しさん [2008/01/08(火) 20:41:34 ]
UNIX Cシェルのmakefileで、
外部の環境変数が設定してあるファイルを
makefileの中から読み込むことって出来ますか?
出来るなら方法を教えてください。

710 名前:デフォルトの名無しさん mailto:sage [2008/01/10(木) 12:43:51 ]
include

実例が見たければ、linux のソースなんかで使われているので
grep -n include /usr/src/linux/Makefile
でも汁




711 名前:デフォルトの名無しさん [2008/01/10(木) 21:44:05 ]
>>710
おお。ありがとうございます。助かりました。

712 名前:デフォルトの名無しさん mailto:sage [2008/01/22(火) 15:08:09 ]
働いたらmakeかな?

713 名前:デフォルトの名無しさん mailto:sage [2008/01/25(金) 15:06:10 ]
GNU makeなんですが、

CC=bcc32
all:
${CC} hoge.c

というようなmakefileを実行する時に
make -e CC=gcc
として${CC}をgccに変更して実行させたいのですが、うまくいきません。
コンソールにそのまま gcc hoge.cと表示されてしまいます。
-eで書き換えた変数はサブシェル?として実行されないのでしょうか・・・?

714 名前:デフォルトの名無しさん mailto:sage [2008/01/25(金) 15:23:19 ]
すいません。>>713です。
makeよぶシェルに-nつけてました。アホでした。

715 名前:デフォルトの名無しさん [2008/02/01(金) 19:39:29 ]
gccとmakeで並列コンパイルはできますか?


716 名前:デフォルトの名無しさん mailto:sage [2008/02/01(金) 21:44:28 ]
>>715
makeの-jオプションのことでいい?

それとも、複数のホストで分散コンパイルするという話なら
distccでぐぐるといいかも。



717 名前:デフォルトの名無しさん [2008/02/13(水) 15:12:44 ]
nmakeが常に、すべてのソースをコンパイルしようとします。
最新のものはコンパイルしないようにするにはどのようにしたらよいのでありましょうか?

718 名前:デフォルトの名無しさん mailto:sage [2008/02/13(水) 19:24:18 ]
Makefileを確認したら?

719 名前:デフォルトの名無しさん mailto:sage [2008/02/13(水) 21:48:25 ]
>>717
依存関係の書きかたを間違えてるんじゃないの?

720 名前:デフォルトの名無しさん [2008/02/19(火) 08:37:35 ]
OSによって、gccとclを使い分けたいのですが、LinuxとWindowsによってコンパイラを変えるにはどのようにしたらよいのでしょうか?



721 名前:デフォルトの名無しさん [2008/02/19(火) 09:48:35 ]
>>720
C++ sourceで書けばいいんじゃね?

722 名前:720 mailto:sage [2008/02/19(火) 10:18:42 ]
もう少し詳しく教えていただけないでしょうか?
ifの様な構文を使って
CC=cl

CC=g++
を切り替えたいのですが

723 名前:デフォルトの名無しさん mailto:sage [2008/02/19(火) 10:41:37 ]
>>720,722
どのmakeをお使いですか?
GNU make、BSD make、nmake、それぞれやり方が違うと思われ。


724 名前:720 mailto:sage [2008/02/19(火) 11:14:26 ]
GNU makeとnmakeです。

725 名前:デフォルトの名無しさん [2008/02/19(火) 11:27:07 ]
つか、nmakeとGNU makeって全然違うようなキガス

726 名前:デフォルトの名無しさん mailto:sage [2008/02/19(火) 11:41:48 ]
そうなのですが、それに対して、同じMakefileを使えるようにする方法はないものかと思案しています

727 名前:デフォルトの名無しさん mailto:sage [2008/02/19(火) 11:43:08 ]
なにか方向を間違っているような気がします.

728 名前:デフォルトの名無しさん mailto:sage [2008/02/19(火) 11:45:00 ]
>>724
共通のMakefileではムリじゃないかなあ。
条件分岐はGNU makeだとifeq/ifdef、nmakeだと!IF/!IFDEFだし。

ふつうは、プラットフォーム毎にMakefileを用意したり生成したりする
のではないかと。


729 名前:デフォルトの名無しさん mailto:sage [2008/02/19(火) 13:09:40 ]
>>724
makefileスレに行け。
pc11.2ch.net/test/read.cgi/tech/1029599472/

730 名前:デフォルトの名無しさん mailto:sage [2008/02/19(火) 13:30:10 ]
これは・・・・いったい・・



731 名前:デフォルトの名無しさん mailto:sage [2008/02/19(火) 13:33:17 ]
1.気の利いた洒落のつもり
2.くだ質スレだと勘違いした
3.じつは人類滅亡の予言

732 名前:デフォルトの名無しさん [2008/02/19(火) 13:38:57 ]
         ヘ   ,ヘ
        / ヽ,  ::.
       /      ::.
       /       :::.  
      ″<●> <●>::.  
      |  、_,、_,   ::::.
     |     !.ノ  :::::::::
     /          ..::::.
    /           :::::

733 名前:729 mailto:sage [2008/02/19(火) 13:47:30 ]
正解は2番……_/ ̄|◯

734 名前:デフォルトの名無しさん mailto:sage [2008/02/19(火) 16:50:40 ]
普通は
makefile.vc
makefile.gcc
makefile.cygwin
makefile.tcc
makefile.pl
makefile.rb
makefile.cobol
のように分けますね

735 名前:デフォルトの名無しさん mailto:sage [2008/02/19(火) 18:36:18 ]
jオプションで並列コンパイルをしています。
これを毎回指定しないでも並列コンパイルする方法はないでしょうか?
OSはFedora8、コンパイラーはintel10です。

736 名前:デフォルトの名無しさん mailto:sage [2008/02/19(火) 18:40:30 ]
なぜその方法を知りたいのかが知りたいなぁ。


737 名前:デフォルトの名無しさん [2008/02/19(火) 18:50:15 ]
alias make='make -j'

738 名前:デフォルトの名無しさん mailto:sage [2008/02/19(火) 19:03:08 ]
あなたは奇妙な感覚に包まれた -more-

739 名前:デフォルトの名無しさん mailto:sage [2008/02/19(火) 19:19:30 ]
>>735
GNU make自身には-jのデフォルト値を変える手段はないですね。
737みたいにエイリアスにするか、シェルスクリプトにするか。


740 名前:デフォルトの名無しさん mailto:sage [2008/02/19(火) 19:29:22 ]
cmakeとsconsのが綺麗でよいよな。
linuxカーネルとかbbみたいなオプション出てこないのもよい。
見た目だけでしか判断できないので。



741 名前:デフォルトの名無しさん [2008/02/26(火) 23:51:30 ]
#ifdef AAA
(コード)
#endif

みたいなのがソース中に書いてあって、これをmake時に、define したいのですが、
$ make CFLAGS="-DAAA" とすると、もとのMakefileで指定されていたCFLAGSが
上書きされてしまいます。CFLAGS+="-DAAA" のように追加指定で make 時の
コマンドライン上で指定って出来ないのでしょうか?


742 名前:デフォルトの名無しさん mailto:sage [2008/02/27(水) 15:41:38 ]
CFLAGSはユーザーが定義するものだから、Makefile側ではそのまま使わない。
$(CC) $(CFLAGS) $(MYCFLAGS) -o (ry

743 名前:デフォルトの名無しさん mailto:sage [2008/03/22(土) 16:52:52 ]
*.ppmとか*.pnmといった各種画像から*.jpgを生成したいのですが、

 .pnm.jpg:; cjpeg-mmx $^ > $@
 .ppm.jpg:; cjpeg-mmx $^ > $@
 .pgm.jpg:; cjpeg-mmx $^ > $@
 .pbm.jpg:; cjpeg-mmx $^ > $@
 
 # 特定ファイルについて特別な変換をする場合は明示的に書く
 hoge.jpg: hoge.ppm
  convert -normalize $^ $@

のようにサフィックスルールを沢山書くのではなく、

 %.jpg: $(wildcard %.pnm %.ppm %.pgm %.pbm)
  cjpeg-mmx $^ > $@
 
 # 特定ファイルについて特別な変換をする場合は明示的に書く
 hoge.jpg: hoge.ppm
  convert -normalize $^ $@

のようにルールを動的に作り、コマンド列は一箇所にだけ
書けばいいようにしたいと考えています。

上の %.jpg: $(wildcard ...) は、まあ、動かないのですが、
何かうまく動かす方法はないでしょうか?

744 名前:デフォルトの名無しさん mailto:sage [2008/03/22(土) 19:37:47 ]
filter-out あたりをつかって別に分けるかなぁ。


745 名前:デフォルトの名無しさん mailto:sage [2008/03/22(土) 21:57:27 ]
要は

 %.jpg: $(wildcard %.pnm %.ppm %.pgm %.pbm)

のルールが実行時に hoge.jpg の依存関係を調べる瞬間に
展開されてほしいわけで、

 %.jpg: $(filter %.p*m,$(PNMFILES))

なども考えましたが、ルール右側で関数を呼びつつ、その引数として
左側のパターンのファイル名を渡す方法がどうもわからないのです。

makeを触るのは数年ぶりで、正直簡単なことに詰まっているだけなのか、
それとも元々難しいのか判断に迷ってここに質問してみました。

746 名前:デフォルトの名無しさん mailto:sage [2008/04/07(月) 11:39:37 ]
去年までUNIXでMakeをばりばりに使っていました。

# あ、プログラマじゃないよ。大規模プロジェクトの管理だけどね

でもちょっと部署が変わって
Windowsなどという邪悪な環境下お仕事する必要が生まれました。
Windows XPで使いたいのですが、どこからmakeをだうそ出来るですか?
つまらない理由で、コンパイルさせてもらえないので、バイナリで
だうそしたいです

gmakeでもBSDの旧makeでも何でもいいです


747 名前:デフォルトの名無しさん mailto:sage [2008/04/07(月) 11:48:52 ]
>>746
日本語でOK。

考えられるのは、MS謹製のVisualStudioについてくるnmakeかCygwinのgnu-makeかね。

748 名前:デフォルトの名無しさん mailto:sage [2008/04/07(月) 12:51:51 ]
>>747
ありがと
でも私は日本人ですから日本語不自由ありません

749 名前:デフォルトの名無しさん mailto:sage [2008/04/07(月) 13:05:23 ]
人に質問するような文章なら、最低限以下の注意くらいしてもよかろう。

・句点を忘れずに。
・奇妙な造語は避ける。
・読む人間の視点で冷静に読み直す。

処で、コンパイルさせて貰えないのに拾ってきたツールは使ってもいいの?

750 名前:デフォルトの名無しさん mailto:sage [2008/04/07(月) 19:52:28 ]
>>746
msysにバイナリのgmakeが入ってる
Current Release: msys-1.0.10 (2004-03-16 05:47)を落とすよろし








[ 新着レスの取得/表示 (agate) ] / [ 携帯版 ]

前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧]( ´∀`)<188KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef