make makes many problems

このエントリーをはてなブックマークに追加
1デフォルトの名無しさん
難しいし方言きつすぎて別の種類の make には使えないし
日本語のまともな資料ないし・・・。

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

参考リンク
http://tanaka-www.cs.titech.ac.jp/~euske/doc/make_qref.html
http://www.tk.airnet.ne.jp/nagae/jp/comp/make/makefile.html
http://www-or.amp.i.kyoto-u.ac.jp/algo-eng/db/makefile.html
http://kanon.plala.jp/develop/makefile.html
http://lagendra.s.kanazawa-u.ac.jp/ogurisu/manuals/make-intro/simplest.html
2デフォルトの名無しさん:02/08/18 00:52
HSP使えば?
問答無用のウンコスレ
Antがアリます。
Antだけに
Antツバキは恋の花
あんと〜あん〜と〜
クソスレだけどスレタイ気に入った。
make love
91:02/08/18 01:18
>>7
ありがとうございます。
日本人相手なら早口言葉としても使えます(多分)

MMMP と覚えてください。
10デフォルトの名無しさん:02/08/18 01:33
HSP使えばいいのに
11デフォルトの名無しさん:02/08/18 01:33
make(・∀・)キター。

結構期待してたわん。
gmakeで統一しろよ
そうすりゃ方言なんて気にしなくていいだろ。
13デフォルトの名無しさん:02/08/18 02:52
ここはmake叩きスレというわけではないよな?

VC++のメニューに
メイクファイルのエクスポート
ってのがあることを思い出した。
あれはイイもの?普通?クソ?
(自分が使う機会があるかどうか微妙だけどとりあえず聞いてみる)
141: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でも通ったし。
automake・・・・
なんでmakeごときがあんなに複雑(そう)になるのかね?
17question: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バイナリになっているので可能な気がします。
18shige:02/08/18 23:12
Makefileを書き換えずにやるのは無理じゃないか?
新しいファイルがディレクトリにあった場合Makefileを更新するツールを
スクリプト言語で書いた方が手っ取り早いだろう。
SOURCE:=$(wildcard *.cpp)
Antよりmakeの方が簡単
21shige:02/08/18 23:33
なるほど。
22デフォルトの名無しさん:02/08/18 23:57
ascii の FTP に、GNU Make のマニュアル日本語版があるよ。
>>1 のページに書いてあるようなことは卒業した人にお勧め。
>>16
システムの全ての必要な要素について、
それがあるか?、またそのバージョンは?
って調べていくんだから、そりゃ大変な作業だろ。

Windowsみたいにまとまってねーんだよ。UNIXは。
微妙な差異がものすごくめんどくさい。
>>23
Windowsだってまとまってねーんだよ。
NTと95は全くの別物。
>>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だったのう。
Antじゃダメなん?
うちの会社、ソースはC++だけどAntでビルドしてるけど、それって異端?
>>27
Javaならね。
UNIXはMakeの資産があるからAntが使われることはないと思う。
2927:02/08/19 23:44
(´-`).。oO(うちの会社は異端かぁ)
>>27
実行形式がJavaってだけで、動かないプラットフォームがでてくるし。
研究室の古株のDigitalUNIX(not Tru64)、IRIXの古いの、HI-UX、HP-UXあたり。
ライセンスとかハードウェアの関係で最新OSにすることはできないことが多い。
31 :02/08/20 01:23
逆にJavaの開発でmake使ってる人っているんか?
何だってこんな糞ツールがここまで普及したんだろう?
UNIXの連中ってアフォばっかりだな
UNIXはもっとLispに学ぶべきだ
>>29
(´-`).。oO(そんな会社にいたんかぁ)
>>32
融通効くからじゃない?行頭のTabを忘れなければ…。
ビルドの為に手間をかけるのが面倒だったからかもしれんし。

>>33
Lispでmakeに相当するもの…ですか?
36 :02/08/21 00:20
>>27
C++だとmakedependしたいからやっぱりmake
>>36
make depend って、私はいつも gcc -MM でやってるんですが、
他に何か定石的なやり方ってあります?
本来makeの機能ってコンパイラ自身が持っておくべきだと思うんだけどな。
んでpre/postな処理はsh/perlあたりでやればすっきりするはずだよ。

makeって機能が貧弱なわりに(そのせいでか?)人によって
書き方がかなり変わってきてメンテしづらいんだよな。
変態的なマクロとか
環境変数との関係とか
make依存の痴漢ルールとか
そのへんがイヤン
>>37

Xのmakedepend
元となる C言語が貧弱すぎたからな。あと、リンカも貧弱すぎたのかも。
だから makeで外部的に一生懸命書く必要があった。

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

別にmakeはCのためだけにあるわけではない。
>>41
とはいえUNIX的ミニマリズムはいい加減古びつつあるような。
PerlやApacheなんかは単体のツールとしてどんどん複雑になっていくように
他のツールも高機能化・複雑化していくのは自然な流れでしょう。

>>42
それがよくない
make setupなんてやるなら
bash setupにしてくれよ。
>>40
サンクスです。makedepend ってツールの名前だったのね。
ちょっと使ってみたけど、たしかに速い。
あと、gcc -MM みたいに、< > で囲んだやつは無視して
くれるともっとよかったけど。
45デフォルトの名無しさん:02/08/24 18:28
>>43
自分でツールを作りながら処理するような場合は、やっぱり
makeの枠組で出来た方が有難い。
46デフォルトの名無しさん:02/08/24 18:37
んだんだ。makeとコンパイラはやっぱり分かれてた方がいい。
勝手にされたらされたで不満がでるはず。
>>43
make setupなんて見たことないぞ。
48デフォルトの名無しさん:02/08/29 04:16
age
VC系の超貧弱makeのことを書いているヤシがいるような
あれはmakeと呼ぶのもおこがましいが...
vc系って何?
makeと呼べる基準って何?
>>2 は何が言いたかったのだろうか。
52gmake:02/08/30 03:55
|-- mona
| |-- Makefile
| |-- sample.xml
| |-- mona.c
| `-- mona.h
|-- 2ch.so

↑のようなディレクトリ構成の時、
既にある2ch.soを用いてmonaディレクトリでmakeして、
monaってsoつくりたいんですけど、どーやればいいんでしょうか?
誰か助けてください。
53gmake:02/08/30 04:14
あ、monaっていう実行ファイルでした^^;
>>52
$CFLAGSで出力先を変えればいいだけじゃないの?
-o オプションかね。
5552:02/08/30 08:25
>54
んーっと、
|-- mona
| |-- Makefile
| |-- sample.xml
| |-- mona.c
| |-- 2ch.so
| `-- mona.h

2ch.soの生成をこうスレって話ですか(?
上の階層のアドインみたいな形にしたいんですけど、毎度コンパイル
しないと駄目なんすかね?
(既にあるのでそれを活用したい)2ch.so生成するルールがねーぞ、
ゴルァってでまふ。
>>55
あなたの日本語が理解できないのだが、
-o やら -L やらで簡単に解決する話のような気がする。
57デフォルトの名無しさん:02/08/30 19:17
>>55
> (既にあるのでそれを活用したい)2ch.so生成するルールがねーぞ、
> ゴルァってでまふ。
ライブラリパスの設定するだけかも。
2ch.soを作成するのは?ってことならlibtoolでも使ってくれ。
5852:02/08/31 04:41
パス設定して、でけたー
さんくすこ>56-57
make makes a massive mess.
ってのを思いついた。そんだけ sage
60デフォルトの名無しさん:02/08/31 12:59
make makes me mad. はどう?つーか、いま FreeBSDの kernel buildでエラーでたから makeをおってるんだけど、さっぱりわかんねー。kmod.mk が動くときの cwdはどこなんだ?
make makes macro maze.
make makes me mad.
make makes more money.
だったらいいなぁ
64名無し人間:02/09/02 00:12
>>38
web pageの更新にもmakeを使ってるから、
C compilerに統合されたら困るよぉ。

ところで、>>17には>>19で通じたんだろうか?
MS製品のVC++、FrontPage(HTMLエディタ)ともに
make的な機能が統合されてるよ。

思うにUNIXにOOPLが普及してmakeクラスがあればもっと使いやすくなるのでは。
66デフォルトの名無しさん:02/09/04 10:53
>>65
makeクラスってどういう意味?
MSのmakeはNanchatte make
俺思うんだけど, コマンドラインで実用に耐えるコマンドがUnix系OSに比べて遥かに少ない
Windowsで, makeなんて使いモノになるの?
Windowsで仕事したことないから分からんのだけど, だれかおせーれ.
>>68
> Windowsで, makeなんて使いモノになるの?
libtiffをVC++6で利用するためにnmakeを利用したけど、
自分でhoge.makを書く気にはならんかった。
>>68
cygwin使え。
7168:02/09/05 01:26
>>69
やっぱりそうだよね.

>>70
cygwin使うくらいならWindowsなんて使わんよ(笑). 仕事でWin触ることはあり得ないからイイっす.
72デフォルトの名無しさん:02/09/07 02:14
そもそもWindowsがCUIのためのOSじゃないってことなんだろうな。
だからcygwinは イイ(・∀・)!! わけで。

CUIが好きなのにWindowsを使う人はmake犬。
>>66
UNIXの欠点はすべてのコマンドがプロセス毎に独立してしまっていて
通信手段は貧弱なパイプしかない。
そこでmake, sort, grep等のコマンドをすべてクラス化してしまって
同一プロセス内で使えるようにすればもっと使いやすくなるのではと推測してみる。
疎結合から密結合へ退化ですな
UNIXは疎に過ぎる。
パイプとソケットだけではもうまともなアプリは作れないよ。
プロセス・ネット越しにオブジェクト間でお話できないとね。
76デフォルトの名無しさん:02/09/07 02:59
あのー質問です。gnu make 使っているんですけど
make を起動した後でどこかのディレクトリに潜って(depして)
元のディレクトリの内容を変更したんですが
正しくディレクトリの変更が反映されていないみたいなんです。

元の gmake にもう一度ディレクトリ内のファイルの依存関係を
読み込ませるにはどう指示すべきでしょうか?
>>75
pipe とかの上でも、HTTP とかの protocol を使えば、お話自体はできるはずなんだけど…
誰かがそんな library 作って広めない限り、話しかけても相手にされないんだよね…
PID か何かを元に、それぞれが互いに話しかけたりできればいいんだけど…
PascalのUNIT方式ならメイクに必要な情報はソース中に書いてコンパイラが処理してくれるのに。

C使うとソースとは別にmake書かなきゃならないんで「なんでこれくらいのことやってくれないんだ」とイライラしてくる。
そのくせコンパイル速度も遅いし。
コンパイル速度と言えば、gccってpch (precompiled header)みたいなのないの?
VC++にあるけど、あれがあれば開発中にコンパイル速度に悩むことは無いと思うが。
makefileなんて小規模なのならチョイチョイっとやるだけで済むし、
大規模ならautoconf,automakeで済ませればいいから体した手間ではないと思うのだが…。
>>76
もうちょっと具体的に書いてくれないと答えられないよ。
automakeが面倒なんだが
83デフォルトの名無しさん:02/09/10 05:00
意外とデフォルトのルールだけでうまくいったりして ...
>>83
> 意外とデフォルトのルールだけでうまくいったりして ...

ライブラリとかあると,なかなかそういうわけにはいかないよね.
85デフォルトの名無しさん:02/09/10 20:29
検索するとautomake/autoconfサイトいっぱい出てくるんだけど
どのサイトが一番いいの?
あ、そうだ。
死のうっと。
automake win32(非cygwin)で動かしたいんだけど、互換ソフト無いですか?
シェルスクリプトみたいなので、そのままじゃ動かないですよね
>>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とソースの管理がウザイんでこの手を使うこともある。
>>78
PascalにUNITなんてものは規定されていない罠。
90デフォルトの名無しさん:02/09/13 14:08
せめてデフォルトで用意されているマクロくらいは
make 間で統一されてればなーと思いませんか ?
91 ◆k/Ubp.Kg :02/09/13 14:30
>>90
あー、それは確かに思うね。普段はGNU make使ってるから気にならないけど、他のmake使うと途端に困る…w
92デフォルトの名無しさん:02/09/13 16:40
automakeってヘッダの依存まで調べてくれるの?
9390:02/09/13 17:09
あと, つい数日前まで恥ずかしながら知らなかったことなんですが,
Solaris 6 (7 かも) の /usr/ccs/bin/make の suffix rule って, 例えば
.c.o : rule っていう感じなんですね.
.c.o :
rule
ではだめみたい. 特定の make に依存しないように, デフォルトのマクロの挙動に
気を使って Makefile を書いてたけど, その努力は意外なところから破綻してしました ...
>>92
> automakeってヘッダの依存まで調べてくれるの?
$ gcc -M hoge.c
で出力される程度には調べてくれます。depcompが調べてくれたと思います。
ちょほいと勉強しようと思ったけど長すぎて読んでられないよ
http://www.gnu.org/manual/autoconf-2.53/html_mono/autoconf.html
http://www.gnu.org/manual/automake-1.6.1/html_mono/automake.html
>>95
> ちょほいと勉強しようと思ったけど長すぎて読んでられないよ
texinfo-4.2を使っているなら、それぞれソースを持ってきて
$ makeinfo --html auto*.texi
すると分割されるが、って、全体の長さは変わらないけどね。
GNUjdoc (ttp://openlab.ring.gr.jp/gnujdoc/)には日本語訳も
あるみたい。
>>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のテンプレ晒して下さい。
>>98
なんかmakefile以前の問題のような。
望むような動作をバッチファイルで書ける?
10198: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 にしたいです。
>>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 .
>>98
もっと具体的に書いてくれないとわかんないよ。
10498:02/09/15 00:28
>>102
いやーお兄さん一本取られちゃったな。
> 望む動作をバッチファイルで実現できたら make は使いませんが…
を優先ですか、さすが!

っていうか、マジレスキボンヌです。
ちゃんと依存関係を調べて make できる makefile の書き方を教えてください。
よろしくお願いします。
10598:02/09/15 00:31
>>103
src 内に .c や .cpp ファイルがあって、
include 内に .h があって
これらのファイルをコンパイルして
最後にリンクして、できあがったファイルを bin の中に入れたいのです。

よろしくお願いします。
>>99
#
CFLAGS = -ansi
>>105
それだけではどんな統合環境でもメイクできないのでは。
リンクしてできあがるファイルが何なのかさえわからないじゃん。
>>98
暗黙のルールに依存しないで
すべてのソースを明示的にコンパイルすりゃできるけど
そんなの面倒だから全部同じディレクトリにしとけ。
んでmake installでバイナリだけコピーすりゃいいよ。
10998:02/09/15 01:17
>>107
いや、ファイルの種類や、取り扱いに使うコマンドはどうでもいいのです。
make の書式について知りたいのです。

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

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

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

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

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

よろしくお願いします。
もう一声.
知りたい make の書式とはどんなやつのこと ?
11198:02/09/15 01:19
>>108
まともなレスありがとうございます。
暗黙のルールの中にはディレクトリは指定できないという事でしょうか?
11298:02/09/15 01:22
>>110
えっと…、「書き方」です。
.cpp ファイルが src というディレクトリ内にあって、
.h ファイルが include というディレクトリ内にあって、
.obj ファイルが obj というディレクトリ内にあるんだよ。という事を
make に教える方法というか…。
>>109
手っ取り早いのは vpath でサーチするディレクトリを追加じゃない?
bin に ふつーに Makefile を書いて vpath で include や src を追加したら
それらのディレクトリも見てくれる。
厳密にやりたいなら、スクリプトの助けがいりそう。
おいらは素人なので偉い人ならもっとスマートにできるかもしれないけど。
suffix rule はカレントディレクトリしか検索しないと思います.
で, 113 の言うとおり VPATH で指定すればいいんですけど,
お使いの make にその機能はありますか ?
11598: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:
11698:02/09/15 01:32
失礼しました、上の方に謎な文がくっついてしまいました。
# Mozilla 1.0 ってちょっとバギーですよね…。
# .9.x の頃のがしっかりしてたな…。

>>113-114
無学なもので vpath という物を知らないのですが、
独立したコマンドでしょうか? make のオプションでしょうか?
117113:02/09/15 01:33
>>113
具体的に言うと shell でディレクトリに潜って ls でリストを変数にいれて
addprefix で bin/ なり src/ なり include/ obj/ なりを付け加えて
それを Makefile.hogera で出力して $(MAKE) -f Makefile.hogera
ってする。
118113:02/09/15 01:34
>>116
GNU Make にあるコマンド。addprefix もそう。
11998:02/09/15 01:36
>>117
なるほど、そういう技巧を使わないとできないんですね。
>>108 さんの方法でお茶を濁そうかと思います。

みなさんありがとうございました。
120113:02/09/15 01:51
別に技巧ってほどのものじゃないしスマートじゃないけどね…。
やっぱ偉い人がツッコミいれてくれないとイマイチだな…。
make自体スマートじゃないからどうしようもない。
それに凝ったmakefile書く奴ってく非生産的なのが多いので
makefileはシンプルに。つかVC使えよ。
VC厨までが出てきたか もう寝るよ
↑もう起きて来なくていいよ。
>>120
低レベルなム板で頑張っても無意味。unix板に帰ろう。
125 :02/09/15 05:40
>>98
こんなところだろう。

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

all: $(DIRS) $(TARGET)

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

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

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

$(OBJDIR)\abc.obj: $(INCDIR)\abc.h
$(OBJDIR)\def.obj: $(INCDIR)\def.h
>>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 では意図したとおりに動かないですよねえ ...
気のせいかな.
ほれ。検証しとらんがこんなもんだろ。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 $@
>>128
検証しました。
makefile 的にはあっている模様ですが、当方の cl.exe (VC6SP5)が

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

あと
TOUCH = touch

$(SRCDIR)/%.cpp: $(INCDIR)/%.h
<タブ> $(TOUCH) $@
は書き忘れでしょうかね。
なるほど pattern rule は suffix rule と違って, ディレクトリ指定が
できるのがいいですね. いままで使用する make にかなり依存するので避けてたんですが.

ちなみに Linux の GNU make, Solaris の make では OK,
IRIX, FreeBSD の make ではだめでした.
131129: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) $@
>>130
> IRIX, FreeBSD の make ではだめでした.
gmake は入ってませんか? なけりゃインストールしちゃいましょう。
わたしゃ、もう、gmake 以外は使えない体になってしまいますた。

>>131
> $(SRCDIR)/%.cpp: $(INCDIR)/%.h
> <豚>$(TOUCH) $@
あまり見かけないやりかたですね。cl には gcc の -M オプションみたいのは
ないのかな?
134デフォルトの名無しさん:02/09/15 21:12
cygwin を使っているのですが、makefile 中で
  cd Dir
  pwd

と書いたとき、pwd が Dir に移動していない時のディレクトリを返してきます。
これは通常動作なのでしょうか?
通常動作。各行は、(おそらく) system によって実行されている。
通常動作です.

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

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

でお望みの動作が得られると思います.
137134:02/09/15 22:37
>>135-136
なるほど、各行で独立して実行されるイメージなのですね。
ありがとうございました。
Makefile中でヒアドキュメントを使えますか?
cat <<EOF
any message
EOF
ってのをMakefileでやりたいのですが、tabをいれたりとかいろいろやってもうまくいきませんでした。
1行ずつechoするしかないんでしょうか。
\
>>139
それがうまくいかないんです。多分使い方が間違っていると思うんですけど。

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

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

こんなのは試しました。
depend:
makedepend -- $(FLAGS) -- $(ALL_C_FILES)
ヒアドキュメントはあまり使わないので詳しくないのですが.
もし sh 上で 1 行でヒアドキュメントが使えれば, make でも使えるかも
しれません ... が, 私にはできないように思います.
<<EOFが不要なんじゃ

target:
[TAB]cat \
[TAB] hoge hoge
144 :02/09/16 19:03
>>143
here documentって知ってる?
>>140
\ → ;\
は試した?
146138:02/09/20 02:59
>>145
返事が遅れてゴメンなさい。

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

# 仕方無いのでechoで頑張りますた。
Eiffel イイ!!
あげちゃったわけでつか。
あげちゃったわけでつか。
あげちゃったわけでつか。
あげちゃったわけでつか。
あげちゃったわけでつか。
あげちゃったわけでつか。
あげちゃったわけでつか。
あげちゃったわけでつか。








                                      氏ねよ、クソが。
>>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 $< $@
OFILES1 = $(DATAFILES1:.dat=.o)
OFILES2 = $(DATAFILES2:.dat=.o)
# DATAFILE1のファイルは, objcopy -XXXX $< $@
$(OFILES1): %.o : %.dat
objcopy -XXXX $< $@
# DATAFILE2のファイルは, objcopy -YYYY $< $@
$(OFILES2): %.o : %.dat
objcopy -YYYY $< $@
152150:02/10/23 19:52
>>151
そんな記述ができるんですね。
すごく勉強になります。

ありがとうございます。
>>151
それ知らなかった。info make見ても見つけられなかったんだが、どこに書い
てある?
static pattern rules のところに書いて歩けど。
あ、もちろん GNU Make の話ね。
>>154
ほんとだ。tnx
ふしあなさんだったよ。
HSP使えばいいのに
VB のためなら死ねる!!
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 の一部抜粋等々,今後追加書き込み致します。
使ってる makedepend が腐ってるんじゃないのかなぁ?
1) 新しいやつをインストールしてみるか
2) gcc/g++ -MM オブションを使うか
3) | sed -e 's/\.c\.o/\.o/' をかますか
してみては。
164みな:02/11/25 17:59
>>163 さん,早速レス有り難う御座います。
周りの人に訊いても,自力で色々検索しても,サッパリわかんなかったんで,
こうして何かレス頂けると,ホント嬉しいです。

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

えぇと…,取り敢えず「3) | sed -e 's/\.c\.o/\.o/' をかます」って,
具体的にどこにどう記述すればいいんでしょうか?
165かなり適当:02/11/25 18:33
>>160
> .SUFFIXES: .o .s .dsm .c .cc .cpp
この行消してみるとどうなる?
166みな:02/11/25 19:04
「かなり適当」こと >>165 さん,只今やってみましたが――
――やっぱりダメでした…。
自動生成内容に,何も変化は起こりませんでした。
そういえば,自分で試行錯誤してた際も,この行を色々と書き換えてみたけど,
結果に何等変化が無かった記憶が…。

てゆーか,そもそもこの行,そんなに必要な行なんですかねぇ…??
一応,サンプルなぞを真似つつ,取り敢えず付けてあるだけな感じなんですけど。
仮に全く無くしたりすると,具体的にどんな不都合が…?
167163: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 何たらの統合環境の“全自動”に甘やかされて育つと,
いざという時に弱々だなーと,思い知らされてるトコでして…。

今回は,色々と教えて下さって,有り難う御座います。
もしかしたら,今後また別件でマヌケな質問してしまうかも知れませんけど。(汗)
普通のmakeだったら.dependってファイルに依存関係吐き出しとけば
勝手に読み込んだりしないかな?FreeBSDのmakeはそうだったけど。

.dependをつくるmkdepなんてコマンドもある。
-aオプションをつけると追加書き込みもしてくれるみたい。
170デフォルトの名無しさん:02/11/26 14:17
どこのmakedependだか知らないけど、Xに付いてるやつなら、
大昔からC++には対応しているはずだけどなあ。
どうせそんなmakedependなら、sedで逃げても、まともに
C++の構文読んでくれなかったり、__cplusplusが定義されて
いなかったりするんじゃないのか?
まともなmakedepend入れた方がいいよ。
gccmakedepなら-MMとか使えるし。
>>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 してないなんて事はありません。

う〜ん,まさに一難去ってまた一難。
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/ というパスに在ります。
じゃあ、処理速度は遅くなるけど、gcc/g++ の -M(または-MM)オプションを
使ってみたらどうかな。こいつは依存関係を標準出力に出すので、
リダイレクトしてファイルに落とす。そして、>>167 みたいに
-include でインクルードしてやればよい。Linux ということは gmake を
使ってるわけだよね?
>>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 に成長しないと,宝の持ち腐れですね…。(自嘲
178176: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
http://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"。
後でダウンロードして,ちょっと試してみますね。
情報,有り難う御座います。
182176: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関連の入門書を嫁。
gcc -MMしろ
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

>>1
中身はまだ読んでないけど、スレタイ気に入った。w
188186: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
>>186
マルチかよ!
make makes me mad.
192IP記録実験:03/01/08 21:19
IP記録実験
http://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を提出することがある。
>>598
訴えられても「誣告ですよ」と返せる様にソース固めて叩きゃ良いじゃん。
荒らさなきゃ良いじゃん。
>>373
ありがと
職場、学校、座敷牢から気兼ねなく書き込みでける
ってゆってたのにー
プンスカ!!
197デフォルトの名無しさん:03/01/09 14:50
最高裁への上告は認められなくなったから、これで事実上判決確定だよ。
逆転も何もないって。          
勢いで上告なんかしても一発で上告却下(門前払い)だよ。
   
二審も一審を支持。これに対して上告しようにも、
刑事訴訟と同様、自由に上告できるってもんでもないのです。
民事訴訟法312条 (上告の理由) 1項
「上告は、判決に憲法の解釈の誤りがあること
その他憲法の違反があることを理由とするときに、することができる。」
http://www.m-net.ne.jp/~doba/goto/hon.htm
  
ようするに上告しても今の制度では100%無駄。 これで完全終了ってことか。
======2==C==H======================================================

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

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

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

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

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

んじゃ!

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

ID:WcTtLBwB
も少しまとめてレスする癖付けれ
マンコとかきまくれるのは2chだけ!!ということに変わりはない
色々、俺を過大評価してる様ですが
(現時点で全世界規模のインテリ層に私がシンパいるとか 笑 ありえないって。)
俺一人で突き進む事が基本なんですが(てか十分。命だけ足りないけど。)

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

では5分後か昼に掛けます。
メルマガまだ?
最高裁への上告は認められなくなったから、これで事実上判決確定だよ。
逆転も何もないって。
勢いで上告なんかしても一発で上告却下(門前払い)だよ。

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

ようするに上告しても今の制度では100%無駄。
これで完全終了ってことか。
(;´(Å)`) <・・・。
電気店のパソコン売り場から2ちゃんにカキコする奴が増えるんだろうなあ
(・∀・)クスクス

何が変わるんですか。
>書き込みの質があがるんでつか
質の低い書きこみが減って、結果的に質の平均があがるのではないかと、、、
>>704

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

おまえらのスポンサーは真に受けてひろゆきに6億円も損害賠償請求して
るじゃん。とか思ったわけだけど
実験
我ながら好き勝手にほざいてしまいますた・・(汗
もし実現しても回線細そうですしね。。。

公人と私人の違いってやつ
俺は嫌いだけどねこの分け方
======2==C==H======================================================

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

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

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

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

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

んじゃ!

────────────────────────Age2ch─
■この書き込みは、Age2chを使って配信されています。
────────────────────────────
Keep your thread alive !
http://pc3.2ch.net/test/read.cgi/software/1041952901/l50
────────────────────────────
ひろゆきが嫌韓に否定的なのを忘れているようで。
IPを総連に売られたら、どうなると思う?
死ねよ馬鹿ども
まぁお前、素人は無難な書き込みしてなさいってこった。
人生をゲームにしちまったひろゆきはオレより3倍バカ
バカになりきるのは(人間として)難しい
2ちゃん閉鎖したら、他のインターネット掲示板が荒れたり、DQNな事件が増える
逆に立てて欲しくなかったんだが(w
おう、おめーら。
まあな、今年は俺の年なわけだがどうよ?
っていうかなぁ、俺の毛毟り取るのはまあ、許してやるよ。
メシくわせてもらってるからな。
でもな、紙とか食わせるのはマジで勘弁してくれよ。
俺ァな、山羊じゃねぇんだよ。
あんなひつじの出来そこないと一緒にしないでくれよ。
だって山羊だぜ、山羊。
俺なんか十二星座ってだけじゃなくて干支でもあるんだよな。
だけど、山羊見ろよ、山羊。
黄金聖闘士(ゴールドセイント)止まりだぜ?
あんなのと一緒にしてもらいたかぁーねーよな。
っていうか、俺を殺せるもんならやってみろよ。
俺はいつどこでも誰の挑戦でも受けるぞ?
日本人・日本在住・男・童貞
ここまではIPから特定しますた。
ななも殺人教唆で逮(ry
どこがどう恥ずかしいんだい?
それを説明しないお前は説得力ゼロだが。
加えて君の無能さも証明しているな。
それは単に業者への制裁措置じゃ?
通ることもあるわな。

「見なかった」といわれて終わるのは証明の問題であって実体の問題ではない。
あった
227山崎渉:03/01/13 19:01
(^^)
ワラタ
229山崎渉:03/01/15 18:14
(^^)
230山崎渉:03/01/23 22:12
(^^)
あ、もちろん GNU Make の話ね。
232デフォルトの名無しさん:03/01/31 20:12
make age
頼むからMakefileにmake love仕込んでソース収めるのやめて。
>>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
238235:03/02/08 02:14
>>236
あーいっこづつ別のファイルに出せばいいんですね。
そういうやつを一個のファイルに出してみて、「いける?」とか思って、
「あーでもこのファイル更新するタイミングがわからん」とか思ってあきらめてました。
いけそうですね。まだ試せないけど。ありがとーデス。
239236:03/02/08 18:43
>>235
期待通りの動作になるかもしれませんが、wildcardで
全部アーカイブにするのは作り方としてよくないとおもいます。
(ソースコードを生成するためのプログラムのオブジェクトまで
拾ってしまう可能性がある。)
lib.aにするところまでサブディレクトリのMakefileで記述したほうが
いいとおもいます。

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

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

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

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

246235:03/02/09 01:20
>>244
どうも。
仕事キッチリなお方ですな。
>>236 質問!
> ARC_RULE:=$(DIR_LIST:%=.%.arc_rule)
っていったい何をやっているの?
248235:03/02/11 00:36
上手くいきましたよ。

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

>>247
ARC_RULE:=$(patsubst %,.%.arc_rule,$(DIR_LIST))
↑の、ちょっと短く書ける書式。
249247:03/02/11 11:58
>>248
あ、そっか。ふだんはこの書き方を使わないから悩んじゃったよ。ありがと。
>>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
251235: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
252235:03/02/11 18:16
だめだ、対応するソースの無くなった.oを消さなきゃ。
253デフォルトの名無しさん:03/02/12 00:38
makeのかわりにjam使ってる人いますか?
↓jam
http://www.perforce.com/jam/jam.html
>>251
> > ifneq($*_SRC,$(wildcard $*/*.c))
> ぱっと見、これが常に偽になりそうです・・・。
なんで? $*_SRCと右の$(wildcard $*/*.c)はワイルドカードが展開されるタイ
ミングが違うはずだが。

> > $@ : .force
> これは、$*/lib.a : .force ですかね。
ちがう。ソースが追加/削除されたら.arc_ruleを書き換えたいんだろ?
255235:03/02/13 00:57
>>254
ごめんなさい。完全に勘違いしてました。
試させてもらいました。

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

削除されたソースファイル名を認識して、対応する.oファイルを削除し、
lib.aからも削除するようにしないいといけないのですが、
既に存在しないファイルに対してmakeがアクションをおこすような指示をどう書けばいいのかが
思いつきません。
>>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'; \
    } > $@
257235: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`
>>257
> >>256
> そいつだと、%.arc_ruleが作り直された段階で
> $*/lib.a: .force の関係がキャンセルされてしまうみたいです。
> なので、%.arc_ruleの出力時に$*/lib.aを削除するようにしました。
$*/lib.aを%.arc_ruleに依存するようにするのはどうよ。
>>259
対応するソースの無くなったオブジェクトがlib.aに残る問題を考えると、
あのタイミングで削除してしまったほうが効率もよく、すっきりします。
261デフォルトの名無しさん:03/02/23 00:46
Makefileを手書きしたいのですがSolaris, Linux(Redhat, Debian), CygwinをMakefile内で自動判別する方法はないですか?
環境変数OSTYPEはだめか?
>>262
OSTYPEでうまくいきそうですがLinuxは両方linux-gnuになってしまいます。
setやenvにはディストリビューションの情報はなさそうです。
両者の区別は可能ですか?
>>263
サポートしているモノのうちのひとつを引数で受け取る仕様に汁。
Linux,CygwinではGNUmakefileをつくって、その中で

SYSTEM := $(...) # ディストリビューションを見分けるプログラムを呼ぶ。
include Makefile
>>265
> SYSTEM := $(...) # ディストリビューションを見分けるプログラムを呼ぶ。
しまった。$(shell ...)ね。
267山崎渉:03/04/17 16:04
(^^)
268山崎渉:03/04/20 03:54
   ∧_∧
  (  ^^ )< ぬるぽ(^^)
269デフォルトの名無しさん:03/05/26 21:53
GNU make 3.79 使ってます。
make の本(GNU make の本ではありません)に

.SUFFIXES:

と書くとサフィックスに関するデフォルトの設定をクリアできると書いてありましたが、
GNU make でやってみると何かデフォルトの設定も使われているようなんですね。

-r オプションは使わないとすると、
GNU make では Makefile にどう書けばいいんでしょうか?


実際に問題が発生した例)
debug.cpp と debug ターゲットがある場合、
make debug とやると .cpp: サフィックスルールも適用されてしまう。
unameじゃだめなの?
あ、ごめん。なんでもない
>>269
.PHONY ではなくて?
273269:03/05/27 08:55
>>272
できました!
ありがとうございました。
274山崎渉:03/05/28 12:42
     ∧_∧
ピュ.ー (  ^^ ) <これからも僕を応援して下さいね(^^)。
  =〔~∪ ̄ ̄〕
  = ◎――◎                      山崎渉
あげ
276デフォルトの名無しさん:03/06/20 09:07
cygwinのmakeで、コマンドラインが長すぎるときにエラーが出てしまいます。
同じコマンドラインでも、Windows98上ではエラーにならず、Windows2000では
エラーになります。

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

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

というわけで、
おしえて、えろいひと。
>>276
解決法: コマンドラインの引数を少なくする
……しかないんじゃないの?
278276:03/06/22 16:18
>>277
すでに動いていた環境でファイル数が増えたからエラーになったのです。
そんなわけで、簡単に引数は少なくできません。

cygwinスレにでも逝ってみます。
279山崎 渉:03/07/15 10:44

 __∧_∧_
 |(  ^^ )| <寝るぽ(^^)
 |\⌒⌒⌒\
 \ |⌒⌒⌒~|         山崎渉
   ~ ̄ ̄ ̄ ̄
280山崎 渉:03/07/15 14:04

 __∧_∧_
 |(  ^^ )| <寝るぽ(^^)
 |\⌒⌒⌒\
 \ |⌒⌒⌒~|         山崎渉
   ~ ̄ ̄ ̄ ̄
最近、Linux、Solarisの開発を始めた者です。
gmakeの質問させてください。

Linux上で
$(DEPDIR)/%.d: $(SRCDIR)/%.cpp
<tab>@[-e $(DEPDIR)] || mkdir $(DEPDIR)
<tab>@$(CXX) -なんとか…

って感じで動かしてたんですが、
Solaris8に移植してgmakeかけようとしたら
/bin/sh: test: 引数が足りません。
とか言われてしまいます。
[-e $(DEPDIR)]
でなんでつまづくかわかりません。
ご存知の方がいたら、教えてもらえないでしょうか
>>281
自己レスです
[がシェルコマンドとは気づかなかった
Solarisのbin/shだと [-eが使えなかった模様
すいませんでした。
あるだろ。
ttp://www.freebsd.org/cgi/man.cgi?query=test&sektion=1&apropos=0&manpath=SunOS+5.9

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

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

bin/ksh じゃないと駄目みたいなんですが、
GUN makeってbin/shじゃないと駄目ってのはありませんでしたっけ?
>>283
誤解を招くので追記(汗
全角スペースの意味でとりました。
半角は入ってます
じゃ[ -d $(DEPDIR) ]は?
>>286

「-d filename
 ファイル filename が存在し、ディレクトリであれ ば真。」
あぅ、こーいうものがあったんですね。
試してみます、ありがとうございました。

288デフォルトの名無しさん:03/07/27 19:15
clean:
(TAB)rm *.o
(TAB)rm *.a

って書いたら *.o がない時点でエラーになっちゃって *.a が消されません
みなさんはこういう時ってどうしますか?
rm *.o *.a とかでしょうか?
-rm
rm -f *.o *.a
290山崎 渉:03/08/02 02:16
(^^)
291三村:03/08/04 21:16
>>276
えろいひとかよっ!
292山崎 渉:03/08/15 16:24
    (⌒V⌒)
   │ ^ ^ │<これからも僕を応援して下さいね(^^)。
  ⊂|    |つ
   (_)(_)                      山崎パン
293デフォルトの名無しさん:03/08/24 13:10
大きいプロジェクトをmakeしていると、今どの程度makeが終わったのか分からなくて不安になるんですが
進捗を表示しつつmakeする方法ってありませんか?
echo
>>293
@を外す
希望が「完成率 30%」とかの表示だと、難しそうな気がする…
297デフォルトの名無しさん:03/09/14 13:55
砂時計を使う。
>>293
大きいプロジェクトならmakefile分割しなよ。
そうすれば望みもかなうし管理も楽になるから。
299デフォルトの名無しさん:03/09/14 14:51
date;make

後は、現在時刻と表示された時刻を見比べて、「どの程度」なのかを推測しろ。
できるよな? な?
300300:03/09/16 23:50
この偉大なスレの300が数日間も放置されていようとはな。
出来れば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つ変化する部分があると
どう書いたらいいものか...
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))))

と書けるみたい。(全角スペースはタブね)
makeの次がantとはね・・・
この中間にある書きやすくて読みやすくて高機能なビルド支援ツールってないのかね。
305302:03/09/22 17:44
>>303
おお、ありがと。
しかし、自分用の makefile ならいいけど、配布用だとまだ使うのは早いかな...
306303: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)

と書けるみたい。(全角スペースはタブね)
307302:03/09/24 01:29
>>306
おお、makefile を更新したら、ちゃんとルールファイルを更新してから
include するんですね。これは使えそうです。どうも、ありがと。

# $(MAKEFILE) は自分で値を設定しておかないといけないみたいですね。
ant
giant-ant
ム板の板歌

パスカルに逢わせてくれてありがとう〜♪
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 に
設定することは可能でしょうか?
さわやかSUN組
313デフォルトの名無しさん:03/11/04 03:00
GNU make の $(error ...) ってどのバージョンから使えるんですか?
314デフォルトの名無しさん:03/11/16 00:07
makeのスレなんて流行らないよ。
makeなんて初心者虐め、他文化虐め、異端者排除の大好きなUN*X厨の道具だもの。
その証拠にこのスレでは幾多の質問が無かった事のように流されてきたじゃない?
makeを使うのに、
makefileを書く必要はないんです。
ただ単に、hello.cをコンパイルしたければ
「make hello」とか「make hellow.exe」と打つだけです。
何が難しいんですか?

...makefileを書かねばならんのは、
分割コンパイルをや非標準のライブラリの導入をする
中級者以上だけです。
316いなむらきよし:03/11/16 01:04
キケー!
makefileもかけないでプログラマ気取りですか?
俺はMakefileしか書かないよ。
俺はGNUmakefileしか書かないよ。
そのうち
#!/usr/bin/make
なんてスクリプトが書かれるのかな。嫌だな。
書いたことあるよ。
make って微妙に挙動が違うから, GNU make 専用に Makefile を書くか,
いろんな make で扱えるように Makefile を書くかで, 面倒くささが
変わってきて, ちょっといや.
make って微妙に挙動が違うから, GNU make 専用に Makefile を書くか,
いろんな make で扱えるように Makefile を書くかで, 面倒くささが
変わってきて, ちょっといや.
gmake,pmake,nmake
他には?
余計なこと書きすぎるとポータビリティーがないのよ。
7行プログラムじゃないけど、必要最小限、極力簡潔に書くの。
俺はgmakeで統一。
Windowsでもcygwin/binにパス通して使ってる。
nmakeは名前違うからいいけどBorlandのはまんまmakeで激しく迷惑だな。
>>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 "$@"
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));
}
書かされたって仕事でWideStudio使ってるのか?
>>329
仕事じゃないよ。でも後で使うつもり。
低機能だけどMFCやVCLよりシンプルで使うのがラクだからね。
windowsでmakefileなんか書くなバカ
>>331
5年ほど前、100m離れた自席とマシン室の間往復するのが面倒で、
自席のPCにCygwin入れてマシン室のサーバ機からtelnetでログイン、
nmake叩いてコンパイル、できたファイルをFTP GETとかやってた。

あの頃はTerminal Serviceがまだ標準じゃ無かったんで、nmake
マンセーだったよ。
いまはリモート接続とかあるけどね
334デフォルトの名無しさん:03/11/30 07:18
Cygwinのmakeで
OSTYPE=$(shell echo $$OSTYPE)
とやってもOSTYPEが空のままなんだけどどうすればいいの?
bashでecho $OSTYPEだとcygwinって表示されるし
linuxでは普通にOSTYPE=linux-gnuがセットされるのに。
335時代錯誤:03/11/30 07:33
javaならxmlで記述するからな〜。makeかぁ、懐かしいね〜隔世の感・・・
>>335
お前みたいなのがJavaの品格を貶めているんだよ?わかってる?
>>328
> makeをgmake.exeにリネームするとmakeを起動するmakefileが通らんので、
Makefileの書き方が悪い。$(MAKE)を使うべき。
make allとかやったときサブのmakefileにall渡すのはどのマクロ?
>>338
普通にターゲットだから $@ の模様。
GNU Make だと MAKECMDGOALS つーのもあるが

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

ををっ、腹ショー!!
make debugってやったらターミナルだとgdb,Xが起動していたらGUIデバッガを起動する。
というのをやりたいんですが、どうやって判別すればいいですか?
>>342
X 上で走っているターミナルの場合はどうすんねん、ってのは揚げ足とりだよなぁ。
とりあえず環境変数 DISPLAY が設定されているか否かで判別すれば?
DEBUGGER := $(if $(DISPLAY),xxgdb,gdb)

debug:; $(DEBUGGER) $(TARGET)
前から思ってたんだけど、makeなんて新しいプログラム用意するんじゃなくて、
シェルスクリプトのライブラリという形で提供すれば良かったんじゃないの?
当時の貧弱な計算機環境だと、巨大なシェルスクリプトが重荷になったのかも
しれないけどさ。新しく文法覚えてツールを使うっていうのは、当時の利用技能の
高いユーザにとっても面倒なことだったと思うけどなあ。
>>345
チンパンジーのアイちゃんですか?
>>8
make: don't know how to make love
348デフォルトの名無しさん:04/02/14 01:54
make は好きなんで age てみたり.

ところで, Makefile で使う変数名で慣用的なものってどんなのがありますか.
CC, CXX, CFLAGS, LDFLAGS, LIBS あたりはみんな普通に使うんじゃないかと
思うのですが.
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)
makeはわかるけどconfigureの書き方がわからない
>>350
さすがに configure 直書きとかじゃないよな?
Autoconf 使ってるのなら↓からぱくってくるなり参考にすればいいんじゃないかな。
ttp://www.gnu.org/software/ac-archive/htmldoc/index.html
352デフォルトの名無しさん:04/03/25 02:35
ルールのコマンドを実行するシェルの環境変数をmakefile内で設定することはできますか?
設定したい環境変数は複数あって、それらをすべてのルールのコマンドに反映させたいです。
>>348
make -np | grep "="
354デフォルトの名無しさん:04/03/30 17:50
MSYS + MinGW なんですが、
コンパイルにかかった時間を簡単に計るのは、どうやったらいいですか?
今は、
all: date target.exe
date:
  date
target.exe: target.cpp
  コンパイル
  date
みたいにしてます。
>>354
ストップウォッチ
>>354
time
357354:04/03/30 19:44
>>356
bin の中を探してたんで、そんなのがあるのを知りませんでした。
>>355
最初は使ってましたが、一分以上待つのはつらいです。

ありがとうございました。
358デフォルトの名無しさん:04/04/23 09:26
ターゲット、依存ファイル、文字列関数の扱う文字列など、
スペース区切りのリストの中にスペースを含む文字列(ファイル名)を
一つの要素として入れるにはどうしたらいいんでしょうか?
my\ document
みたいに\でエスケープする。
360358:04/04/23 23:45
>>359
ありがとうございます。
ターゲット、依存ファイルには置けるようになりました。
ですが、文字列関数にわたすと複数の要素に分割されてしまいました。

このエスケープはどんな仕様で動作しているのでしょうか?
マニュアルに書いてあります?
最近、環境を移行する作業してました。
かなり昔に作られたmakeファイルや、誰が作ったのかわからないmakeファイルを
新環境用に「感」で直しつつ作業してました。

ある程度manで調べたりしたけど、本当・・・難しい。
まともな日本語の本ってないんですかね?1にも書いてありますが。
>>360
言語もわからんのに答えられるわけねーだろボケ!
363358:04/04/25 13:29
>>362
言語?あ・・・。

すいません。GNU makeです。
364デフォルトの名無しさん:04/05/11 13:36
SRCS=$(shell ls *.c)
とやると.cのファイルが全く無い場合
>そのようなディレクトリやファイルはありません。
というエラーメッセージが表示されてしまいます。
メッセージを出力しないようにするにはどうすればいいですか?
>>364
SRCS=$(shell ls *.c 2>/dev/null) は使いたくないか?
ふつうは、$(shell echo *.c) か $(wildcard *.c) だろ
367 :04/05/21 15:56
makefileって難しいです
質問ですが、
LINUXでg++でコンパイルするmakefileを
作ったんですが、

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

CFLAGに設定するようなものなのでしょうか?
>>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の使い方は複雑なのでググッて調べて下さい.
369367:04/05/21 16:31
>>368
ふええ 懇切丁寧にありがとうございます
いくらググッても なかなか出てこなくて困惑していたんです
ありがとうございます
370368:04/05/21 16:32
タブ入んないんですね.
>>368
DEFS = -DWORDS_BIGENDIAN
hoge.o: hoge.cpp
- g++ $(DEFS) hoge.cpp
+ <TAB>g++ $(DEFS) hoge.cpp
>>367
そもそもエンディアンに依存したコードを書こうとするのが良くない。
ビットシフトとか何とか使って最初からエンディアンに依存しない実装に汁。
>>371
現実を知れ
タコ助が
>372
>371 は至極当然のことを言ってると思うんだけど、問題になるのは性能なの?
makeなんてバッドノウハウの塊だ・・・階層化するともうめちゃくちゃ
make嫌いや
環境変数LIBを上書きして定義してて2日も悩んでた。orz
あほだ
376デフォルトの名無しさん:04/06/23 16:50
ソースとオブジェクトファイルが混ざらないように、
オブジェクトファイルの出力先を変えたいんですが、

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

とか書いてしまうと毎回オブジェクトファイルが生成しなおされてしまいます。
なんかうまい手ないでしょうか?
>>376
オブジェクトファイルの出力先にMakefileを書いて試してみたけど,
依存ファイルのところの記述(:のあと)で親ディレクトリに遡れないみたいで,
これでもうまくいかないですねぇ.
>>376
$(OUTDIR)/%.o : %.cpp
  $(CXX) $(CXXFLAGS) -c $< -o $(OUTDIR)$@
なんだ。makeが好きなの俺だけか・・・。
他になんか便利なビルドツールあったらおしえちくり
Antぐらいかな
bjam
>>378
$(OUTDIR)/%.o : %.cpp
  $(CXX) $(CXXFLAGS) -c $< -o $@
>>379
MSBuild
384376:04/06/24 16:15
>>378,>>382

GNU Make 3.80使ってるんだが、
$(OUTDIR)/%.o : %.cpp
だと条件にひっかからね。
ふつー、OUTDIRにMakefileを作って
VPATH = $(SRCDIR)
386デフォルトの名無しさん:04/06/24 19:10
gnu makeの最新日本語リファレンスってないの?
>>386
ftp://ftp.ascii.co.jp/pub/GNU/make/
だと古い?一つ前なんだけど。
>>384
んなわけねー
$(OUTDIR)%.o : %.cpp
ってオチか?
389376:04/06/25 21:56
>>385
サンクスコ
VC++(NMAKE)で作ったmakeファイルって
Linuxで使用できるんですか??

おせーてくだされ。
>>390
VC++の自動生成で作ったmakは、nmake方言をバリバリ使用
しているので無理。

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

nmake方言を極力使わないようにして書いた手作りmakなら、
CC/LD辺りのマクロを変えるだけで動く可能性はあるが。
>>391
上級者様、ありがとうございまっす!
自分の望んだ以上のお答えでありました!

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

手書きで書かないとダメなんすかねぇ…
総入れ歯、むかし居た会社で
nmake を「ナマケ」て呼んでた '`,、('∀`)'`,、
394デフォルトの名無しさん:04/07/23 19:51
誘導されてきました

Makefileの中に引数で条件分岐できるif文書きたいんだけど
どうしたらいいでしか?
395デフォルトの名無しさん:04/07/23 19:53
Make makes make making many problems.
make make make!
そんなまともな日本語のドキュメントがあったのか。
399デフォルトの名無しさん:04/07/26 00:12
再帰的makeする時、上の階層のMakefileで定義した変数
を下位階層のMakefileに継承させたいのですが、どうすればよいでしょうか。
POSIX標準のmakeってどうして作れないの?
shみたいになんとかしてほしいよ。automakeはよく分らんし。
gnu makeでいいじゃん。
自分のreadmeには必須と書いてあるよw
perlみたいに商用UNIXにも標準搭載してくれりゃ構わんけどな。
automake,autoconf使えばいいじゃん。あれこそ最高のハックだよ。
UNIXプログラマ必須のツールだと思うけどね。だからNetBSDみたいに、
GNUツールの全てのMakefileを自前のmake用に新規に書くのは嫌い。
もちろんビルド時間の節約にかなり貢献してるのは認めるけど。。。。

>>403
gmakeは他のGNU系列のパッケージには依存してないよな。gmake必須と
するのは、別にGNU原理主義とも関係ないと思う。
automake, autoconf使ってるのでもGNU make依存してるのとかあった
ような。(まぁそいつの使い方がなってなかっただけかもしれんが)
406デフォルトの名無しさん:04/10/08 17:12:14
あげ
407デフォルトの名無しさん:04/10/11 14:38:29
cookってのはどうなんですか

使ったことないんで使い勝手がわからんばい
408デフォルトの名無しさん:04/10/28 01:46:23
http://make.paulandlesley.org/autodep.html
-MMD だけで良いと思ってましたが、だめなようです。
どなたか解説していただけませんか。
409デフォルトの名無しさん:04/10/28 01:48:11
boost が好きなんですが、make の替わりに、bjam を使うのはどうなんでしょう?
410デフォルトの名無しさん:04/10/28 15:07:58
>>409
どっちが君の言いたいことか曖昧な気がするので両方答えてみる。

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

q2) 漏れもbjam使いたいけど、いいの?
a2) チーム開発ならリーダー以下チーム全員に合意を取り付けないと。
  個人なら好きなのを使って問題なし。
411409:04/10/28 16:23:20
>>410
言われてみれば、とってもあいまいでした。
q2) の方を訊いてみたかった個人開発の者です。
今は前に書いた makefile を使いまわして、それなりに満足していますが、
あの boost があえて使う bjam は、どんな感じなんだろうかと思ったんです。
けど、ポータブルなところで選ばれてる気がしてきました。

実際に使ってる人の意見も聞いてみたいです。
412デフォルトの名無しさん:04/10/30 22:36:17
413デフォルトの名無しさん:04/10/30 23:12:19
うちの会社の人バッチファイルで全部コンパイルしてるよ。
だから一部だけ修正しても全モジュールリビルドしてリリースしてる。
414デフォルトの名無しさん:04/10/31 02:03:47
一行変えたら全部コンパイルやり直しなんてやってられないな...
415デフォルトの名無しさん:04/10/31 02:29:19
自分はmake使ってるけどC++のヘッダにコード書きまくるんで結構遅い・・・
416デフォルトの名無しさん:04/10/31 10:51:35
>>415
いったい何を書いてるの?

そういう漏れは、Pimpl Idiom 教団に入信しちゃった。
417デフォルトの名無しさん:04/11/04 10:13:35
VC++でプリコンパイルヘッダガンガン使うようになってからは、
iostreamの代わりにiosfwdをインクルードとかそういう事を考える必要も無くなったな。
418デフォルトの名無しさん:04/11/04 11:12:25
ガンガンっていうかあまりにあたりまえの機能過ぎて
gccに付いてないのを知ってびびった。
3.xには付いてるんだっけ?
419デフォルトの名無しさん:04/11/05 04:47:57
>>418
3.4 からです。

何年も待って、やっとキター。と思ったら、3.4 はびみょーな出来栄えだったのな。
420デフォルトの名無しさん:04/11/06 00:42:40
プリコンパイル済みヘッダて変な日本語だよな
421デフォルトの名無しさん:04/11/06 12:41:00
別に
422デフォルトの名無しさん:04/11/07 22:43:24
頭痛が痛いみたいな
423デフォルトの名無しさん:04/11/07 23:07:36
precompil"ed" headerなんだから、特に変だとは思わないけど。
424デフォルトの名無しさん:04/11/07 23:37:32
むしろ「済み」だけ日本語にするバランス感覚が受け入れ難い。
425デフォルトの名無しさん:04/11/08 01:54:48
プリコンパイル済み

事前にコンパイルが済んでいる
だろ。どこがおかしいのやら。
426デフォルトの名無しさん:04/11/08 07:16:26
>>425
それなら「事前コンパイル済みヘッダ」になるだろ。
なぜ「プリコンパイルドヘッダ」ではないのだろうか?
どうやらMSの翻訳が元のようだが。
427デフォルトの名無しさん:04/11/08 19:53:37
>>426
普通カタカナに直す時に「ド」なんて書かない。あなた日本人?
428デフォルトの名無しさん:04/11/08 19:55:46
へぇ(嘲笑)
429デフォルトの名無しさん:04/11/08 20:16:47
なら、プリコンパイルヘッダでいいじゃん。済みなんて入れる必要もない。
430デフォルトの名無しさん:04/11/08 20:31:05
↑論点ずれてる
431デフォルトの名無しさん:04/11/09 00:16:14
いまさらMS翻訳にケチつけるなよ。
いったいなにがしたいんだ。
432デフォルトの名無しさん:04/11/12 08:38:43
>>427
> 普通カタカナに直す時に「ド」なんて書かない。
よくあるがこれは変な習慣だよなあ。そもそも、なんで抜くのかが疑問だ。コレMSが始めたのか?
433デフォルトの名無しさん:04/11/12 08:51:46
>>427
メモリマップドI/Oとか言うじゃん
434M.B.:04/11/12 11:33:11
全部読んだが make を自分で書いたアフォは漏れだけだった…… orz
435デフォルトの名無しさん:04/11/12 12:29:46
>>433
それは「ド」ではなく「ト」では?
436デフォルトの名無しさん:04/11/13 02:37:12
>434
(;´Д`)
漏れも、なんか make をうまく使いこなせなくて
癇癪起こしちゃって自分で書こうとした事があるよ……
437M.B.:04/11/13 15:24:17
Java のプログラムを Win 上で開発しているのだが、
昔アスキーで出してたような、.exe 形式の make が見当たんなくてさ、
GNU make のソースを Cygwin 上でコンパイルして
.exe 形式にすりゃあいいと思ったんだが結局ソースが見つからず、
ええい面倒臭え、と思って Java で書いた。
非常にチャチなものだが便利に使ってる。
438デフォルトの名無しさん:04/11/13 17:13:54
>>437
GNU make のソースが見つからないって、アフォか。
439デフォルトの名無しさん:04/11/13 19:02:26
てか、cygwinにGNU makeのバイナリがあるだろが。
440デフォルトの名無しさん:04/11/13 19:03:33
javaならant使えよ・・・
441デフォルトの名無しさん:04/11/13 19:55:33
ぶかあああああああああああああああああああああああああああああああああ
442デフォルトの名無しさん:04/11/13 20:52:21
ワロタ
443M.B.:04/11/13 23:13:39
ぶかー。
444デフォルトの名無しさん:04/11/13 23:17:33
makefile書くまでもないような処理をバッチファイルで
ftimecomp source target && ( sourceからtargetを作る処理 )
とかはたまにやるけど。ftimecompは自作ツール。
445M.B.:04/11/13 23:23:45
自作せんとね、使い方忘れるのよ。
いらんものいろいろ作ったなぁ。
446デフォルトの名無しさん:04/11/14 00:00:07
その自作ツールの使い方を忘れるんで、
Makefileに書いておくんだけどな、おれ
447M.B.:04/11/14 00:18:42
漏れも自分ちの電話番号とか忘れるんで紙に書いてしまっとくんだが、
どこにしまったか忘れる。
448デフォルトの名無しさん:04/11/14 00:29:24
>>447 無駄話でageんな
449M.B.:04/11/14 00:50:29
ここでも言われた _| ̄|○
450デフォルトの名無しさん:04/11/19 22:59:34
2重コロンの意味がわかんね
よく単一ターゲットに使われるみたいだけど
どういう意味なの?
451デフォルトの名無しさん:04/11/20 09:13:01
452デフォルトの名無しさん:04/11/20 13:19:25
よんだけどわかんなかったんだよぅOTL
453デフォルトの名無しさん:04/11/20 18:31:09
>>452
カードキャぷたーさくらってマジ面白いよな。
454デフォルトの名無しさん:04/11/21 17:55:08
>>452
> よんだけどわかんなかったんだよぅOTL

同志よ、俺もわからん。
でも、普通に依存関係書いている分には必要ないような気がする。
455デフォルトの名無しさん:04/11/21 18:16:18
>>454
少し調べてみた。

all:target.txt
target.txt::source1.txt
@echo do task 1
@echo source is $^
target.txt::source2.txt
@echo do task 2
@echo source is $^
source1.txt source2.txt:

source1.txtが更新されると、「do task 1」が表示され、source2.txtが更新されると「do task 2」が更新される。
両方更新されると、両方表示される。
コロンをひとつにすると、同じターゲットに対するコマンドが二つあると警告が出て、両方更新された場合にも一方のコマンドしか実行されなくなる。
マニュアルにある通り、どのソースが変更されたかによって実行するコマンドを切り替えるための方法だと思う。
456make に代わる次世代標準:04/11/21 21:03:13
make ってそろそろ引退してほしい。
make に代わる次世代標準はありませんか?
ちなみに Ant は処理系が Java で書かれているし XML 記法だからやだ。
457デフォルトの名無しさん:04/11/21 21:04:44
make が sh と結びついている時点で最悪なんだよ。
perl か python と結びついてほしい。
たいていの UNIX には perl や python は入っているだろうし。
458デフォルトの名無しさん:04/11/21 21:05:18
>Ant は処理系が Java で書かれているし
インスコすれば、そんなことは誰もわからない。
459デフォルトの名無しさん:04/11/21 21:07:49
>>456
MSBuild使え
460デフォルトの名無しさん:04/11/22 00:01:46
>>457
個人的にはAWKと(ry
461デフォルトの名無しさん:04/11/22 02:57:27
>>456
次世代標準なんかじゃないけど、jamとかどうですか?
ttp://www.freetype.org/jam/index.html
462デフォルトの名無しさん:04/11/22 08:35:38
>>457
SHELL変数をうまく使え
463デフォルトの名無しさん:04/11/22 09:26:18
464デフォルトの名無しさん:04/11/23 13:13:19
MinGWのmakeで処理していますが、

a.hpp : b.hpp

の依存関係の解決方法を教えていただけないでしょうか?
465デフォルトの名無しさん:04/11/23 17:01:09
>>464
依存関係を解決するとはなんぞや?
466464:04/11/23 17:45:13
いろいろ調べていた時に、サイトで使われていた表現ですが、
間違っていたのでしたら申し訳ありません。

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

b.hppを編集した場合、a.hppをインクルードしている各々のobj(cpp)ファイルが
その都度コンパイルされて欲しい、ということです。
467デフォルトの名無しさん:04/11/23 17:54:16
>>466
gcc -MM
makedepend
このへん調べれ。>408のリンク先もけっこういいな。
468デフォルトの名無しさん:04/11/23 17:59:56
ヘッダの依存関係のチェックやビルド後のリリース用スクリプト
(どっかにコピーするとか)の記述なんかもサポートしたMakefileの
フレームワークというかお手本みたいなのってどっかにないの?
0から手書きするのめんどくさ過ぎ。かといってAutoなんたらとか使いたくないし。
469デフォルトの名無しさん:04/11/23 18:35:14
>>468
>ヘッダの依存関係のチェックやビルド後のリリース用スクリプト
>(どっかにコピーするとか)の記述なんかもサポートしたMakefileの
>フレームワーク
Autoなんたらはそのためにあるのだが....
470デフォルトの名無しさん:04/11/23 19:47:11
>>467
早速調べてみます。有難うございます。
471466(464)=470:04/11/23 19:49:50
466(464)=470です。すいません。
472デフォルトの名無しさん:04/11/23 21:02:27
>>464
自分も最近makeを使い始めたんですが、ヘッダファイルをターゲットとして指定するのがそもそも間違いでは??
ターゲットはあくまで、その下の行のコマンドによって作成されるターゲットであるはずです。
つまり>>466の場合では、a.hppは、b.hppから”作成"されるわけではないので(ただインクルードされているだけ)、
a.hpp : b.hpp とa.hppをターゲットとして書くのはおかしい気がします。
(ターゲットにヘッダファイルが指定された時にmakeがどのような動作をするのかわかりませんでしたが)

こういう場合は、

オブジェクトファイル: ヘッダファイル1 ヘッダファイル2
もしくは、

ソースファイル: ヘッダファイル1 ヘッダファイル2

とスペースで区切って並べて書いた方がいいかもしれません。こうする事で少なくとも、
ターゲットのオブジェクトファイルやソースファイルと、複数のヘッダファイルとの依存関係は維持出来るはずです。

しかしこれでは、ファイルが増えて来た時に大変そうなので、他にもっと良い方法があるのかも知れませんが…。
473デフォルトの名無しさん:04/11/23 21:10:51
> もしくは、
>
> ソースファイル: ヘッダファイル1 ヘッダファイル2

ああ、すいませんこれは間違ってますね。
オブジェクトファイルをターゲットとするべきだと思います。
474デフォルトの名無しさん:04/12/22 18:34:39
外部コマンドを実行するときに
hoge.h : hoge.list
    hmaker.exe --prefix=hoge hoge.list

みたいなふうにしたんですが、この=が原因でこの文がマクロ変数に
代入してる式みたいなふうに認識されてしまい升。nmake.exeです。
どうすればいいんでしょうか。
475デフォルトの名無しさん:04/12/23 03:08:59
make makes make make many problems.
476デフォルトの名無しさん:04/12/25 02:20:57
cmake使ってる人いる?
477デフォルトの名無しさん:05/03/02 02:16:06
ソースツリーの中から必要な.h,.cファイルを抜き出すために、
.cのファイルのリスト(SRC)を元にgcc -MMで出力される依存関係を出力し、
それをパースして、必要な.cと.hファイルを出力するperlスクリプトを書いてみました。
files.txt:
gcc -MM $(CFLAGS) $(SRCS) | parse.pl > $@
みたいな感じです。
で、生成されたファイルの中身は、
../src/a.h
../src/dir/b.h
のようにファイルが羅列されており、
これらのパスの"../src"を"package/src"に置き換えたパスにコピーしたいと思っています。
そのルールを書きたいのですが、
srcpackage: files.txt
srcpackage: DSTFILES=$(subst ../,package/src,$(shell cat files.txt))
srcpackage: $(DSTFILES);
../package/%.h : ../src/%.h
  cp $^ $@
../package/%.c : ../src/%.c
  cp $^ $@
と書いてみたところ、下二つのルールにひっかからず、コピーできないでいます。
他に、
%.c:
cp $@ $(subst package/src, ../ , $@)
というのも試してみましたが、
srcpackageがsrcpackage.cとひっかかってしまい、うまくコピーができません。
どなたかご教示いただけないでしょうか?
478デフォルトの名無しさん:05/03/02 02:20:46
>>477
> srcpackage: files.txt
> srcpackage: DSTFILES=$(subst ../,package/src,$(shell cat files.txt))
> srcpackage: $(DSTFILES);

これの意味を自分で(日本語で)説明できるか?
できないなら、マニュアル見直せ。
ほかにも問題がありそうだが、まずはそこから。
479477:05/03/02 16:26:25
>>478
1行目:srcpackageを作るにはまずファイルのリスト(files.txt)への依存を定義
2行目:ファイルのリストのテキストを読み込み、コピー先のパスに書き換え、変数に代入
3行目:コピー先のファイルへの依存を定義
ということをやりたかったのですが、

srcpackage: file.txt;
%.c :
  コピー処理
%.h :
  コピー処理

のようにすると、file.txtの生成前に後のcat file.txtなどが実行され、
困っていました。
ご指摘の通りあまり理解せずに進めていました。
とりあえずMakefileには

srcpackage: file.txt
  make -f Makefile.copy copy

と書き、別のファイル(Makefile.copy)で、
copy: $(subst ../src, package/src, $(shell cat file.txt|./parse.pl | sort | uniq));
%.c:
  コピー処理
%.h:
  コピー処理
としてみました。
480デフォルトの名無しさん:05/03/02 20:34:06
>>479
srcpackage: file.txt
を「srcpackageを作るためにはfile.txtが必要」と読め。
481デフォルトの名無しさん:05/03/03 00:44:11
>>479
やっぱりマニュアル読んで出直せ。

> srcpackage: DSTFILES=$(subst ../,package/src,$(shell cat files.txt))

この構文は、 srcpackage をターゲットとするコマンド内でのみ有効な変数の代入。
グローバルな変数への代入なら "srcpackage: " を削除しろ。

> srcpackage: $(DSTFILES);

これは
srcpackage:
 $(DSTFILES)
と同じ意味。
srcpackage を $(DSTFILES) に依存させるのであれば最後のセミコロンを削除しろ。
482デフォルトの名無しさん:05/03/03 00:55:16
>>477
# ここらへんで SRCS を定義しておくこと。

ASSIGNMENT_OF_USEDFILES:=assignment_of_USEDFILES.mak

$(ASSIGNMENT_OF_USEDFILES) : $(SRCS)
 echo 'DSTFILES:=' `gcc -MM $(CFLAGS) $(SRCS) | parse.pl` >$@

-include $(ASSIGNMENT_OF_USEDFILES)
DSTFILES:=$(patsubst ../src/%,package/src/%,$(USEDFILES))

$(DSTFILES) : package/src/% : ../src/%
 cp $< $@

.PHONY : srcpackage

srcpackage : $(DSTFILES)

# 動作未確認
483477:05/03/04 16:25:30
>>480
すみません。以後気をつけます。

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

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

>>482
ありがとうございます。
こちらで試してみます。
484デフォルトの名無しさん:05/03/05 12:14:47
> srcpackageが必要とするファイルを生成する別のルールにも
> 適当されるものだと勘違いしておりました。

適用されるよ。ルールじゃなくてコマンドに、だけど。
485デフォルトの名無しさん:05/03/11 01:03:30
GNU make を使っています。
ルールでのファイル指定や、文字列操作関数なんかでは、
要素の区切りがスペースになってるんですけど、
スペースを含む文字列を一つの要素として扱いたい場合はどうすればいいんでしょうか?

$(TARGET_DIR)/target : ...
 ...

という Makefile に対して、
 $ make TARGET_DIR='dirname with spaces'
とされた場合の対処に困っています。

とおもったら、
>>358-360 で少し似た話がでていたようですね。
文字列操作関数の問題が解決してないのか。
486デフォルトの名無しさん:2005/04/27(水) 22:07:37
sconsってどう
http://www.scons.org/
487デフォルトの名無しさん:2005/05/16(月) 15:24:34
nmakeの使い方を教えてください 
488デフォルトの名無しさん:2005/05/16(月) 23:14:49
489デフォルトの名無しさん:2005/06/05(日) 19:59:57
MSのnmakeって「this is Not gMAKE」の略称だっけ?
490デフォルトの名無しさん:2005/06/08(水) 13:08:56
GNU make で、複数のターゲットを更新するアクションの
カコイイ書き方教えれ。

例) トークン表とパーサ表を吐く、Bisonに対するアクション指定
491490:2005/06/08(水) 13:15:14
「コマンド連鎖の缶詰を定義する」の章に載ってた
分かりづらいよマニュアル......orz......
492デフォルトの名無しさん: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を使わない”という条件で
この部分を簡単に作成するいい方法はないでしょうか?


ヨロシクお願いします。
493492:2005/06/12(日) 00:28:58
> $(TARGET) : $(OBJS)
> $(FC) -o $@ $(OBJS)

訂正です。
$(TARGET) : $(OBJS)
<---Tab--->$(FC) -o $@ $(OBJS)
です。
494492:2005/06/12(日) 00:31:30
更に訂正っす。
> SRCS = $(SHELL *.f90)
> OBJS = $(SRCS:.f90=.o)

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

の間違いです。
何度もすいません。
495デフォルトの名無しさん:2005/06/12(日) 12:02:03
496492:2005/06/12(日) 14:51:16
レスありがとうございました。

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

他に何か手法があればご紹介お願いいたします。
497495:2005/06/12(日) 14:59:24
>>496 GNU make が使えない環境か。読み間違えてたよゴメン。
498デフォルトの名無しさん:2005/06/12(日) 15:26:42
>492
Makefile を修正するシェルスクリプトを作成してそれを実行するようにすれば?
499デフォルトの名無しさん:2005/06/12(日) 15:35:01
>>498
そしてconfigureにたどりつきAutomakeがワイルドカードに未対応に気付くとか
500492:2005/06/12(日) 16:12:12
>>498
そうですね。最終的にはそうなってしまう可能性もあります。

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

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

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



501デフォルトの名無しさん:2005/06/14(火) 20:53:36
>>500
Sconsというのがあるけど、Python必須らしいです。
http://www.scons.org/doc/HTML/scons-user.html
意外と便利そうです。
import glob
files = glob.glob(wildcard)
502デフォルトの名無しさん:2005/07/21(木) 13:55:49
antなbuild.xmlをMakefileに移植してるんですが、
ディレクトリ移って作業するにはどうしたらよいんでしょう。

cd hoge; だと、その行のコマンドしか駄目ですし。
移るディレクトリにまた、Makefile作っておいて、
さらにmake呼ぶのがmake流なんでしょうか
503デフォルトの名無しさん:2005/07/21(木) 13:57:08
ageます
504デフォルトの名無しさん:2005/07/21(木) 19:17:41
>>502
>移るディレクトリにまた、Makefile作っておいて、
>さらにmake呼ぶのがmake流なんでしょうか
automakeでmakeファイル作るときは
そんな風にするのが一般的だと思う
「make流か」と言われれば
?
505デフォルトの名無しさん:2005/07/21(木) 20:17:33
ん?cdで移動しても問題ないだろ
506デフォルトの名無しさん: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デフォルトの名無しさん:2005/08/15(月) 13:21:52
半角スペースを含むパスを使わない。
509デフォルトの名無しさん:2005/08/15(月) 15:16:58
超ダサっ!
510デフォルトの名無しさん:2005/08/15(月) 17:30:57
INCLUDE=-I"path 1" -I"path 2"
ふつうにできるょ?
511507:2005/08/17(水) 23:01:21
返信あざっす!

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

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

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

-include xxxxx.mk

http://www.ecoop.net/coop/translated/GNUMake3.77/make_toc.jp.html#TOC15
512デフォルトの名無しさん:2005/08/18(木) 00:47:12
>>511
> 今から僕のコンパイル作業ディレクトリを変えるのはちょっと・・・
includeされる側のディレクトリとは関係ないんじゃないの?
相対パスで指定するとかsymlink張ってみるとか、なんか工夫してみ。
513デフォルトの名無しさん:2005/08/18(木) 04:49:48
>>507
mingwのmakeってcygwin使わないんだっけ?
cygwinのmakeならこんなんで逃げれるけど。
-include $(shell cygpath -m $$(cygpath -d $(VALUE)))
514507:2005/08/18(木) 23:29:14
www.ecoop.net死んじゃったか(´∀`;)
makeの解説よかったのに…勿体無い。

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

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


まあ、なんとかしてみます。
>>512-513ありがとう。
515507:2005/08/18(木) 23:39:30
というかマイドキュメント(C:\Documents and Settings\xxxx)の配下でコンパイルするのがいけないのか・・・。
いや、でもあきらめたくない。
516デフォルトの名無しさん:2005/08/19(金) 02:18:52
windowsだと短い名前とか使えなかったっけ?
DOCUME~1 みたいなやつ。たしかdir /xで見れたような。
あるいはsubstを使ってみるとか。
517516:2005/08/19(金) 02:20:34
substはシェルのコマンドのsubstね
518デフォルトの名無しさん:2005/08/19(金) 13:43:07
>>514
WinNT移行でNTFSならシンボリックリンクできるよ。
「ジャンクション」或いは"symlink-1.02.zip"で検索して味噌。
519デフォルトの名無しさん:2005/08/19(金) 13:58:59
NTFSの仕様は糞だよな
520507:2005/08/21(日) 01:39:22
>>516
短い名前かぁ。盲点ですた。

>>518
まじっすか

>>519
シンボリックリンクに慣れるとねぇ。あれは便利すぎ。
でも、NTFSにもシンボリックリンクは実装してないだけで、
データ構造の中には予約としてあるっぽいよ
521507:2005/08/21(日) 01:40:59
やば。age設定になってた。ゴメス(^ω^;)
522デフォルトの名無しさん:2005/08/23(火) 12:19:05
>>520
だからね、ディレクトリに関してはジャンクションはディフォルトで使えるんですよ。
ファイルに対するジャンクションが意図的に禁止してあるだけで。
生半可な知識で語るくらいなら>518に書かれているツールの作者のページを読んできな。
523デフォルトの名無しさん: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デフォルトの名無しさん:2005/08/28(日) 20:53:45
展開ってどういう意味?
527デフォルトの名無しさん:2005/08/28(日) 21:02:30
配置って意味でそ
528デフォルトの名無しさん:2005/08/28(日) 21:15:23
コピーしたいだけなら、普通に copy とか、cp とかすりゃいいんじゃねーの?
529デフォルトの名無しさん:2005/08/28(日) 21:37:51
>>524

「cd bin」でbinディレクトリに移動してからコンパイルすればいい。
../srcディレクトリをVPATH等で指定してやれば問題はないはず。
530デフォルトの名無しさん:2005/08/30(火) 09:09:34
パスと%使ったらうまくできた。
これでターゲットファイル名とソースファイル名のみを書いてやるだけで
自動でオブジェクトファイルだのを別ディレクトリに展開してくれるようになった。
お騒がせして申し訳ない。
531デフォルトの名無しさん:2005/10/24(月) 15:09:12
同じディレクトリで2つのmakeファイルを作成する方法はないですか?

1つめのプログラムをmakeのち実行した後に、2つめのプログラムをmakeのち実行をしたいのですが。
ちなみにcを使っています。
532デフォルトの名無しさん:2005/10/24(月) 15:09:47
ageさせていただきます。
533デフォルトの名無しさん: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デフォルトの名無しさん:2005/10/24(月) 23:25:09
>>531
make -f 使えばいいんじゃないの?
535デフォルトの名無しさん:2005/10/24(月) 23:26:55
>>533
$(notdir ...)
536ミャケでございます:2005/10/25(火) 10:39:38
>>535
ありがとうございます。うまくいきました。
537デフォルトの名無しさん:2005/11/04(金) 08:43:29
$(CC) $(CFLAGS) -o $@ $<

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

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

svnで管理してたから古い状態で復活できたけど、
10個近く新しいファイルを作ってた。
復活できたファイルも変更点がかなりあった……
538デフォルトの名無しさん:2005/11/04(金) 10:30:57
>>537
デフォルトの規則をそのまま使えばいいのに…
539デフォルトの名無しさん:2005/11/04(金) 11:30:34
>>538
VPath使ってたら明示せざるを得なくなった

コンパイラの切り替えとか含めててディフォルトルールじゃ対応しきれなくなってた
540デフォルトの名無しさん:2005/11/12(土) 21:10:42
下記のような makefile で make X.a を実行した場合に,x.b y.b z.b が表示
されて欲しいのですが,表示されません.

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

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

ただし,実際には X.b に相当する記述がたくさんあるので,下記のような記述
は避けたいと考えています.また,$(eval ) バグがあるので $(eval ) の使用
も避けたいと考えています.
541540: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デフォルトの名無しさん:2005/11/29(火) 15:29:14
>>17にある質問と同じ内容なのですが
1ソースファイルから1実行ファイルを作るだけの処理を
一気にまとめてやるにはどういう風にmakeをかけば良いでしょうか?
543デフォルトの名無しさん:2005/11/29(火) 17:37:05
ALL: ari.exe ori.exe haberi.exe imasokari.exe
544デフォルトの名無しさん:2005/11/29(火) 21:42:02
>>543
ありがとうございます。
環境の違いを書くのを忘れ申し訳ありません。
とりあえずallで指定しておくんだなと思って、こう書くことにしました。
とりあえず動いていますが、なんかおかしいところがあればご指摘ください。

CC = gcc
TARGET := $(patsubst %.c,%,$(wildcard *.c))
all : $(TARGET)
% : %.c
$(CC) -o $* $<
545デフォルトの名無しさん: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デフォルトの名無しさん: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デフォルトの名無しさん: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 しなくても、
コンパイルが成功するたびに最新の依存関係に更新されて便利。
550548: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デフォルトの名無しさん:2005/12/29(木) 21:50:13
VPATH
552549:2005/12/30(金) 00:17:51
>>550
一番最初は .o ファイルが存在しないから、
ヘッダの依存関係に関係なくコンパイルが必要なことがわかる。
553548: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デフォルトの名無しさん: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デフォルトの名無しさん:2006/03/18(土) 08:08:37
gnu makeでローカルなサッフィクスルールを作りたいのですが、
事情があって生成ファイルにhoge.foo.etcのように複数のピリオドを持たせています。
適切なやり方がありましたら教えてください。
559デフォルトの名無しさん: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デフォルトの名無しさん:2006/03/21(火) 02:51:13
>>560
なにに困ってるのかサッパリわからん。
普通に使い分けられるだろ?
563デフォルトの名無しさん:2006/03/21(火) 15:51:15
>>560
ん?VisualC++て、nmakeだから、Borlandのmakeとはコマンド違うくない?
564デフォルトの名無しさん: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デフォルトの名無しさん:2006/03/24(金) 07:50:49
コンパイルオプションが違うからwww
566デフォルトの名無しさん:2006/03/24(金) 14:19:56
>>564
お前のその -O3 は一体何なんだと。
567デフォルトの名無しさん:2006/03/24(金) 16:57:22
おっさん
568デフォルトの名無しさん:2006/03/24(金) 18:32:38
90°傾いたウサギ風船
569デフォルトの名無しさん:2006/03/26(日) 02:16:20
1つのMakefile で複数の exe に対応することってきますか?
1 cpp -> 1 exe で。
現状ほぼ同じ Makefile をコピーして指定したソースファイルの名前を編集してやっているのですが、
非常にめんどくさいです。

もし可能ならばさらに、カレントディレクトリにある cpp をワイルドカードばりに取得して、
a.cpp -> a.exe のようにコンパイルしていきたいです。
よろしくおねがいします。
570デフォルトの名無しさん:2006/03/26(日) 02:24:54
571デフォルトの名無しさん:2006/03/26(日) 02:28:58
てゆーか、make a.exe でデフォルトルールで作られるだろ。Makefile無くても。
違ったっけ?
572569:2006/03/26(日) 08:42:02
さぱーりわからん。
SRCS = hoge.cc mage.cc #もしくは $(wildcard *.cc) ?
EXES = $(SRCS:.cpp=.exe)
OBJS = $(SRCS:.cpp=.obj)
ときてさてどうすれば?
573デフォルトの名無しさん:2006/03/26(日) 08:45:06
574569:2006/03/26(日) 10:10:31
%.o : %.cc
        $(CC) -c $(CFLAGS) $(CPPFLAGS) $< -o $@
みたいにかいてもなんにもならないYO.
%.cc の値がどこからくるのかさぱーりわからん。
575デフォルトの名無しさん:2006/03/26(日) 10:14:29
>>574
書いただけじゃ何も起こらないよ。
ゴールを指定して make を実行しないとね。
576569:2006/03/26(日) 10:19:29
>>575
make hoge.o
とやれってこと?
一度の make で全部一気にやりたいって質問だったんだけど。
読み直してみたら、たしかに書いてないな orz
577デフォルトの名無しさん:2006/03/26(日) 10:53:20
>>576
make がどう動くのか、わかってないんじゃないか?
その状態じゃどうやっても無駄だぞ。
578569: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デフォルトの名無しさん:2006/03/26(日) 12:43:00
580デフォルトの名無しさん:2006/03/26(日) 13:15:06
>>579
さぱーりわからん。
581デフォルトの名無しさん:2006/03/26(日) 13:20:17
>>580
俺もお前が何がわからんのか、さぱーりわからん。
とりあえず >>578 をパターンルール使って書き変えて動かなかった Makefile 晒せ。
582デフォルトの名無しさん:2006/03/26(日) 15:28:00
%.exe: %.cpp
と書いてやれよ
からかってるんだろうけど不親切にもほどがある
583デフォルトの名無しさん:2006/03/26(日) 16:40:05
>>578
SRCS=$(wildcard *.cpp)
all: $(SRCS:.cpp=.exe)
%.exe: %.cpp
gcc $< -o $@
584デフォルトの名無しさん:2006/03/26(日) 19:54:01
>>582-583
必要な情報はそろっているのに、それだけのものを作れないのは何故か、
知りたかったんだ。スレ汚しスマンね。
585デフォルトの名無しさん:2006/03/27(月) 23:19:08
>>559
Thx.
お猿の訳本しか持ってないんでよくわかんなかったけど、
gmakeのマニュアルをちゃんと読むことにします。
http://www.ipp.mpg.de/~dpc/gmake/make_93.html
586デフォルトの名無しさん:2006/04/13(木) 01:08:07
gcc では、-Dマクロ指定が出来ますが、make 実行時に、外からマクロ指定を
したいと思って、make -DAAA=aaa とかやってもエラーになります。
こういうことはできないでしょうか?
587デフォルトの名無しさん:2006/04/13(木) 01:10:04
>>586
make CFLAGS="-DAAA=aaa"
だったような
588デフォルトの名無しさん:2006/04/13(木) 01:12:09
ありがとうございました
589デフォルトの名無しさん:2006/04/22(土) 23:02:52
makeしたら負けかなと思っている
590デフォルトの名無しさん:2006/05/12(金) 02:30:57
rake使ってる人いる?
591デフォルトの名無しさん:2006/05/12(金) 03:23:14
スレタイいいね。
そういう英語の言い回しがあるのかと思ったけど>>1のオリジナルなのか。
592デフォルトの名無しさん:2006/05/12(金) 23:36:57
Ruby初心者スレより転載
http://shakenbu.org/yanagi/d/20050214.html#p02
593デフォルトの名無しさん:2006/05/13(土) 14:44:26
ダセエ名前だな
なんでも頭文字にRつけりゃいいと思ってやがる
594デフォルトの名無しさん:2006/05/13(土) 15:01:29
ほのぼのRake
595デフォルトの名無しさん:2006/05/13(土) 21:43:16
MakefileならぬRakefileだしなw
まあでもRuby信者の俺には、けっこう便利よ
Rubyに集中できるし
596デフォルトの名無しさん: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 $< $@
という部分を共通化することはできないですか?
598597:2006/06/01(木) 19:13:49
どんなことがやりたいかというと、

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

みたいに書くと、hoge.fooとhoge.txtが、moge.fooとmoge.txtがそれぞれ対応してくれないかなー
ということです。
599デフォルトの名無しさん:2006/06/01(木) 20:49:14
>>597
>.foo: .txt というサフィックスルールは使えません。
何で?
「.foo は .txt から作る」
「.hoge も .txt から作る」
でいいんじゃ…?
600597:2006/06/01(木) 22:02:56
あー、いや、
同時に、test.txtからtest.fooを、qwertyというツールで作りたかったりするんです。
# もしくは、xyzzyツールの別のオプションで、と読み替えられてもかまいません
そうなると、サフィックスルールだと、hoge.txtもtest.txtも同じように扱われちゃって。

言葉足りなかったですね。
601デフォルトの名無しさん:2006/06/02(金) 00:53:55
>>597
FOO_FROM_TXT=hoge.foo moge.foo
$(FOO_FROM_TXT) : %.foo : %.txt
  xyzzy $< $@
602597:2006/06/02(金) 01:01:45
>>601
すげえ!
と思ったけどできませんでした orz

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

こういう機能って、どっかに書いてありますのン?
603デフォルトの名無しさん:2006/06/02(金) 01:04:40
>>602
hoge.txt はあるのか?ファイルがないんじゃないの?

これはスタティックパターンルールっていう構文。
http://www.gnu.org/software/make/manual/html_node/Static-Pattern.html
604597:2006/06/02(金) 01:28:17
簡単なテストプロジェクト作ったら、>>601で、うまく動いた
んー、本プロジェクトで動かないのは、別な要因があるようです(´・ω・`)
探ってみます。

>>603
マニュアルにもちゃんとあるんですね。サンクスです。
605597: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というツールで、行いたいのです。
うまいことできないかなー。
606597:2006/06/02(金) 02:09:33
違ってました orz
hoge_foo_bar.txt→hoge_test_bar.foo
moge_foo_bar.txt→moge_test_bar.foo

でした。
607597:2006/06/02(金) 02:20:15
また、違った・・・

hoge_foo_bar.txt→hoge_test_bar.foo
moge_foo_qwerty.txt→moge_test_qwerty.foo

真ん中のfooとtestだけ違うんです・・・。
608597: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デフォルトの名無しさん:2006/06/02(金) 09:31:03
>>608
% はいっこじゃないとだめ。いっこなら、頭でも途中でもいい。
610597:2006/06/02(金) 19:23:49
了解です。

ファイル名変更して、
%test.foo: %foo.txt
で、いこうと思います。
611デフォルトの名無しさん:2006/07/22(土) 23:36:57
>>1
超いまさらだけど、スレタイ、せっかくだから頭文字mで統一したら?
make makes a massive mess
とか。
612デフォルトの名無しさん:2006/07/22(土) 23:50:02
>>611
語呂が悪い。
make makes many messes のほうがいいかな。
613デフォルトの名無しさん:2006/08/01(火) 14:00:24
暗黙ルールを使うと

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

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

つまり、
1. 中間ファイルがそのまま残る。
2. (全然別系統もしくは手動による)中途ファイルの変更があったときは、
その中間ファイルからmake処理が行われる。
というようにしたいのです。
614デフォルトの名無しさん:2006/08/01(火) 15:09:19
>>613
何か勘違いしてると思うよ。
中間ファイルは削除されたんじゃなくて、もともと無かったんだよ。
615デフォルトの名無しさん:2006/08/01(火) 21:03:34
>>614
makeを実行すると、こちらの書いたルール通りに実行し、
directoryに中間ファイルがたくさん作られているのが見えます。
また、最後に
rm hoge huge .........
と中途で生成された大量のファイルをrmしているのが見えます。
616デフォルトの名無しさん:2006/08/01(火) 21:57:56
>>615
それは「暗黙のルール」じゃないんじゃないか?
make -pして、何が問題なのかもう一度考えてみるべし。
617デフォルトの名無しさん:2006/08/01(火) 23:29:50
>>613
暗黙ルール使わなけりゃいいんじゃね?
618k ◆WFGp1NZuiw :2006/08/03(木) 21:43:19
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デフォルトの名無しさん:2006/09/03(日) 21:32:12
>>619
これじゃ駄目か?

%.x:
  command1
  command2
  command3
621デフォルトの名無しさん:2006/09/03(日) 21:40:54
>>620
それだと$<が空っぽで使えませんでした。
commandの中で$<と$@を参照してます。
622デフォルトの名無しさん:2006/09/03(日) 21:46:00
>>621
じゃ、続けて
%.x: %.abc
%.x: %.def
%.x: %.ghi
って追加すると、解決できないかね?

駄目だったら define 使えばいいんだけどね。
623デフォルトの名無しさん:2006/09/03(日) 21:53:35
>>622
それだと %.x: %.ghi だけルールが設定されて、
他のルールはコマンドなしのためにキャンセルされないですか?
624デフォルトの名無しさん:2006/09/03(日) 21:54:44
>>623
コマンドなしのルールはキャンセルされるって、どこで仕入れたガセネタだ?
625デフォルトの名無しさん:2006/09/03(日) 22:07:33
>>624
勘違いでした。暗黙のルールをキャンセル方法でした.
結局>>622の方法でも $< は空っぽでした。
626デフォルトの名無しさん:2006/09/03(日) 22:16:37
>>625
実際の依存関係を設定してないんじゃないか?

%.x:
 echo $@ $<

に続けて

a.x: a.abc

と書けば a.x a.abc が出力されるだろう。
627デフォルトの名無しさん:2006/09/03(日) 22:38:51
>>626
ファイル一つ一つ書かないとダメですか?
628デフォルトの名無しさん:2006/09/03(日) 22:40:41
>>627
スタティックパターンルールでもいいぞ。
$(ABC_X_FILES) : %.x : %.abc
$(DEF_X_FILES) : %.x : %.def
629デフォルトの名無しさん:2006/09/03(日) 22:58:20
>>628
ありがとうございます。できました。
630デフォルトの名無しさん:2006/09/04(月) 00:15:41
makeから、rakeに乗り換えた。
Ruby使いには、rakeはいいねえ。
631デフォルトの名無しさん:2006/09/15(金) 17:22:16
mingw + GNU make + コマンドプロンプトを使っとる

make[1]: Entering directory ...
の後に表示されるディレクトリ名を絶対パスから相対パスにしたいんだがどうしたらいい?
結果が長くてうっとうしい
うっとうしい以外に害は無いんだけどね
632デフォルトの名無しさん:2006/09/15(金) 17:54:27
そういうパッチあてなされ
633631:2006/09/16(土) 01:52:48
>>632
やっぱ大元に手を加えないとダメか
パッチ見つからんからソース眺めてみるわ・・・
どうもありがとう
634デフォルトの名無しさん: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デフォルトの名無しさん:2006/09/17(日) 16:52:16
>>635
(add-hook
'makefile-mode-hook
'(lambda ()
(local-set-key "\C-cc" 'compile)
))
637デフォルトの名無しさん:2006/09/17(日) 17:05:23
>>631

そういうフィルタを書くというのは、よくやるなぁ。
ついでに注意すべき warning なんかを強調してみたりとか。
638デフォルトの名無しさん:2006/09/29(金) 00:41:47
>>630
rakeの日本語の資料はどこを見ればいいのかな?
機能をmakeと対比してあるとありがたい。特に再帰処理関係で。
639k ◆WFGp1NZuiw :2006/09/30(土) 22:40:57
640デフォルトの名無しさん: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デフォルトの名無しさん:2006/10/27(金) 15:17:43
>>643
原文見てないけど、「最小公分母」の誤訳でしょ。
645デフォルトの名無しさん:2006/10/29(日) 19:04:49
nmakeってsubstとかpatsubstに相当するものないの?
646デフォルトの名無しさん:2006/12/02(土) 23:58:48
暗黙のルールで
hoge.cc -> hoge.o -> hoge
の順番に作りたい時、
hoge.o -> hoge
のときにg++じゃなくてccになっちゃうんだけど、
これってCC=g++にしておくしかない?
647デフォルトの名無しさん:2006/12/03(日) 10:32:31
>>646 何が不満だ?
648646: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デフォルトの名無しさん:2006/12/04(月) 10:29:19
man gccしてみろ。
650デフォルトの名無しさん: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デフォルトの名無しさん:2007/01/05(金) 01:32:28
それは make でなくシェルスクリプトの話かと。
for i in *.cpp; do grep COMMENT $i > `echo $i|sed -e 's/\.cpp/.log/'`;done
とか。
653デフォルトの名無しさん:2007/01/05(金) 10:41:05
拡張子がcppとlogに決まっているなら、サフィックス・ルールを使用する方法もある。
http://www.ecoop.net/coop/translated/GNUMake3.77/make_10.jp.html#SEC102
654デフォルトの名無しさん:2007/02/13(火) 22:23:13
rakeってC++をmakeできますか?
655デフォルトの名無しさん:2007/02/14(水) 19:27:32
          ___/ 冫   ∧_∧
 ∧_∧  _ __ (_    /   (´∀` )
 ( ´∀`)/ ) )  |   |    //   \
 (  ⊃/ //  ∧_∧    (__(_/`  |
  \__//    ( ´∀`)       _///
       ̄     ∪ ̄∪      (__(__)
656デフォルトの名無しさん:2007/02/15(木) 03:19:04
>>654
makeの意味わかってる?

gccでコンパイルとか言うのなら、rakeでできるよ。
Makefileがあって、それをmakeしたいのなら、rakeではできない。
makeを使おう。
657デフォルトの名無しさん:2007/02/15(木) 20:52:50
makeは簡単だけどautotoolが全然わからねえ。
まじむずい。autoconf、automake、Makefile.am
Makefile.in、configure.inまじややこい。
658デフォルトの名無しさん:2007/02/15(木) 22:43:13
>>657
最初は手書きMakefileでいいさ。
659デフォルトの名無しさん:2007/02/18(日) 04:52:13
おれもmakeはいいけどautotoolsキライ
makeごと捨て去ってもいいんだけど
なんか他にいいビルドツールないかな?
660デフォルトの名無しさん:2007/02/18(日) 11:07:14
階層が錯綜してるときのmakeって書くのにうんざりするんだけど、
もっと楽ちんなものないのかなあ。

661デフォルトの名無しさん:2007/02/18(日) 13:27:03
rakeとantくらいしかとっさには思い出せないな……
662autoXXの癌はlibtoolだと思う: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デフォルトの名無しさん:2007/03/20(火) 05:00:53
仕事でjam使ってます。サッパリわかりません
664デフォルトの名無しさん:2007/04/24(火) 17:30:42
Rake
http://www2s.biglobe.ne.jp/~idesaku/sss/tech/rake/index.html

rakeの日本語資料が少ないので、ここいいですね。
665デフォルトの名無しさん:2007/04/24(火) 20:42:09
>>664
Makefileより見た目ゴチャゴチャしててなんかいやだな。
666デフォルトの名無しさん:2007/04/24(火) 21:33:43
>>665
見た目も何もRubyプログラムそのものですからね

Ruby知ってたら、すごい楽できるよ
667デフォルトの名無しさん:2007/04/24(火) 21:34:27
>>665
ゴチャゴチャしてるという印象はこのへんかね。

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

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

668デフォルトの名無しさん:2007/04/24(火) 21:46:49
Cプログラマ向けにCの文法で書けるCakefile(ケーキファイル)なんての
を妄想してみたが、Rubyだとブロックで書くところを関数に抜き出さないと
いけないから書きにくいな。C++でboost使うとlambdaっぽいことができる
からマシになるのかな。
669デフォルトの名無しさん:2007/04/24(火) 21:50:45
lakeやらpakeが強いかも。元々適当な言語だし。
670デフォルトの名無しさん:2007/04/24(火) 22:06:16
lakefileは普通のプログラムと見かけ大差なさそう。

pはperlだろうが lispつながり(?)でprologを連想。
ホーン節って依存関係定義そのものだな。
671デフォルトの名無しさん:2007/04/24(火) 22:31:43
dake
672デフォルトの名無しさん: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デフォルトの名無しさん:2007/04/25(水) 15:04:25
rakeで依存関係をgccに解決させたりしてるときにどう持ってくればいいんだ?
676デフォルトの名無しさん:2007/04/25(水) 21:31:46
>>675
makedependってこと?
677デフォルトの名無しさん: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デフォルトの名無しさん: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デフォルトの名無しさん:2007/08/17(金) 22:00:45
普通に info に載ってるけど。
man にも簡単な説明が出てる。
682デフォルトの名無しさん:2007/08/23(木) 02:41:13
このスレ見ててもグチばっかだし、ほんとにmakeって使えないと思う。
(autotools含めてバッドノウハウの塊だと思う)

何故代替品は出てこないんだろう?
オープンソース界隈で普及しすぎて、デファクトになっちゃったのが原因なのかね。
マイクロソフトの独占なんかより、makeの独占を禁止してほしい。
683デフォルトの名無しさん:2007/08/23(木) 02:45:27
>>682
ant, bjam, rake, SCons とかは代替品とは言わんの?
684デフォルトの名無しさん:2007/08/23(木) 05:44:05
autotoolはともかくmakeは無いと困るだろ。
685デフォルトの名無しさん: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 ユーザガイド
http://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デフォルトの名無しさん: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デフォルトの名無しさん:2007/10/16(火) 10:52:08
>>692
できるよ
ただし他の拡張子のついてないファイルもダブルクリックでmakeされちゃうけど
694デフォルトの名無しさん:2007/10/27(土) 01:05:58
>>692
>>693の問題があるので、俺は、適当に、batファイル書いて、クリックしてるけど


cygwinコンソール開くの面倒な時も多々あるw
695デフォルトの名無しさん:2007/10/27(土) 19:15:09
Makefile.mak にすりゃいいんだ
696デフォルトの名無しさん:2007/12/09(日) 23:42:59
>>688
make all clean
697デフォルトの名無しさん: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デフォルトの名無しさん:2007/12/24(月) 15:48:00
>>697
それ循環定義になるならムリだと思う。
ただ現実的な解決方法としては
jpeg と jpg にしてしまうとか。
もしくは 一旦別の拡張子のファイルを touch して
jpg -> jpg コンバートかますとかならやれそう
699デフォルトの名無しさん:2007/12/24(月) 15:51:55
>>697
THUMBNAIL/%.JPG : IMG/%.JPG
  convert -geometry 150x150 $< $@
700697:2007/12/24(月) 15:56:38
>>698
ありがとうございます。

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

>jpeg と jpg にしてしまうとか。
これがいいですかね
701デフォルトの名無しさん:2007/12/24(月) 15:58:03
>>697
全然サフィックスルールじゃないけど
SRCJPG = ${shell ls IMG/*.JPG}
${SRCJPG}: TUMBNAIL/%.JPG: IMG/%.JPG:
  convert -geometry 150x150 $< $@
という感じじゃダメかな。
(Windowsならlsをdirとかに変えて)
702697:2007/12/24(月) 16:14:05
>699,701
これだ!ありがとうございます!
うまくいきました
703デフォルトの名無しさん:2007/12/30(日) 12:19:08
makeで普通.cppを修正するとそこだけコンパイルしてくれますよね?
.hを修正してもコンパイルしてくれないのですが、どうしたらいいですか?
誰か教えて
704デフォルトの名無しさん: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デフォルトの名無しさん:2007/12/31(月) 22:50:40
こ こ で も 椿 ○ 粘 着 か
年の瀬だっちゅうのに悲しくないのかね
709デフォルトの名無しさん:2008/01/08(火) 20:41:34
UNIX Cシェルのmakefileで、
外部の環境変数が設定してあるファイルを
makefileの中から読み込むことって出来ますか?
出来るなら方法を教えてください。
710デフォルトの名無しさん:2008/01/10(木) 12:43:51
include

実例が見たければ、linux のソースなんかで使われているので
grep -n include /usr/src/linux/Makefile
でも汁
711デフォルトの名無しさん:2008/01/10(木) 21:44:05
>>710
おお。ありがとうございます。助かりました。
712デフォルトの名無しさん:2008/01/22(火) 15:08:09
働いたらmakeかな?
713デフォルトの名無しさん: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デフォルトの名無しさん:2008/01/25(金) 15:23:19
すいません。>>713です。
makeよぶシェルに-nつけてました。アホでした。
715デフォルトの名無しさん:2008/02/01(金) 19:39:29
gccとmakeで並列コンパイルはできますか?
716デフォルトの名無しさん:2008/02/01(金) 21:44:28
>>715
makeの-jオプションのことでいい?

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

717デフォルトの名無しさん:2008/02/13(水) 15:12:44
nmakeが常に、すべてのソースをコンパイルしようとします。
最新のものはコンパイルしないようにするにはどのようにしたらよいのでありましょうか?
718デフォルトの名無しさん:2008/02/13(水) 19:24:18
Makefileを確認したら?
719デフォルトの名無しさん: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で書けばいいんじゃね?
722720:2008/02/19(火) 10:18:42
もう少し詳しく教えていただけないでしょうか?
ifの様な構文を使って
CC=cl

CC=g++
を切り替えたいのですが
723デフォルトの名無しさん:2008/02/19(火) 10:41:37
>>720,722
どのmakeをお使いですか?
GNU make、BSD make、nmake、それぞれやり方が違うと思われ。
724720:2008/02/19(火) 11:14:26
GNU makeとnmakeです。
725デフォルトの名無しさん:2008/02/19(火) 11:27:07
つか、nmakeとGNU makeって全然違うようなキガス
726デフォルトの名無しさん:2008/02/19(火) 11:41:48
そうなのですが、それに対して、同じMakefileを使えるようにする方法はないものかと思案しています
727デフォルトの名無しさん:2008/02/19(火) 11:43:08
なにか方向を間違っているような気がします.
728デフォルトの名無しさん:2008/02/19(火) 11:45:00
>>724
共通のMakefileではムリじゃないかなあ。
条件分岐はGNU makeだとifeq/ifdef、nmakeだと!IF/!IFDEFだし。

ふつうは、プラットフォーム毎にMakefileを用意したり生成したりする
のではないかと。
729デフォルトの名無しさん:2008/02/19(火) 13:09:40
730デフォルトの名無しさん:2008/02/19(火) 13:30:10
これは・・・・いったい・・
731デフォルトの名無しさん:2008/02/19(火) 13:33:17
1.気の利いた洒落のつもり
2.くだ質スレだと勘違いした
3.じつは人類滅亡の予言
732デフォルトの名無しさん:2008/02/19(火) 13:38:57
         ヘ   ,ヘ
        / ヽ,  ::.
       /      ::.
       /       :::.  
      ″<●> <●>::.  
      |  、_,、_,   ::::.
     |     !.ノ  :::::::::
     /          ..::::.
    /           :::::
733729:2008/02/19(火) 13:47:30
正解は2番……_/ ̄|◯
734デフォルトの名無しさん:2008/02/19(火) 16:50:40
普通は
makefile.vc
makefile.gcc
makefile.cygwin
makefile.tcc
makefile.pl
makefile.rb
makefile.cobol
のように分けますね
735デフォルトの名無しさん:2008/02/19(火) 18:36:18
jオプションで並列コンパイルをしています。
これを毎回指定しないでも並列コンパイルする方法はないでしょうか?
OSはFedora8、コンパイラーはintel10です。
736デフォルトの名無しさん:2008/02/19(火) 18:40:30
なぜその方法を知りたいのかが知りたいなぁ。
737デフォルトの名無しさん:2008/02/19(火) 18:50:15
alias make='make -j'
738デフォルトの名無しさん:2008/02/19(火) 19:03:08
あなたは奇妙な感覚に包まれた -more-
739デフォルトの名無しさん:2008/02/19(火) 19:19:30
>>735
GNU make自身には-jのデフォルト値を変える手段はないですね。
737みたいにエイリアスにするか、シェルスクリプトにするか。
740デフォルトの名無しさん: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デフォルトの名無しさん:2008/02/27(水) 15:41:38
CFLAGSはユーザーが定義するものだから、Makefile側ではそのまま使わない。
$(CC) $(CFLAGS) $(MYCFLAGS) -o (ry
743デフォルトの名無しさん: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デフォルトの名無しさん:2008/03/22(土) 19:37:47
filter-out あたりをつかって別に分けるかなぁ。
745デフォルトの名無しさん:2008/03/22(土) 21:57:27
要は

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

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

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

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

makeを触るのは数年ぶりで、正直簡単なことに詰まっているだけなのか、
それとも元々難しいのか判断に迷ってここに質問してみました。
746デフォルトの名無しさん:2008/04/07(月) 11:39:37
去年までUNIXでMakeをばりばりに使っていました。

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

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

gmakeでもBSDの旧makeでも何でもいいです
747デフォルトの名無しさん:2008/04/07(月) 11:48:52
>>746
日本語でOK。

考えられるのは、MS謹製のVisualStudioについてくるnmakeかCygwinのgnu-makeかね。
748デフォルトの名無しさん:2008/04/07(月) 12:51:51
>>747
ありがと
でも私は日本人ですから日本語不自由ありません
749デフォルトの名無しさん:2008/04/07(月) 13:05:23
人に質問するような文章なら、最低限以下の注意くらいしてもよかろう。

・句点を忘れずに。
・奇妙な造語は避ける。
・読む人間の視点で冷静に読み直す。

処で、コンパイルさせて貰えないのに拾ってきたツールは使ってもいいの?
750デフォルトの名無しさん:2008/04/07(月) 19:52:28
>>746
msysにバイナリのgmakeが入ってる
Current Release: msys-1.0.10 (2004-03-16 05:47)を落とすよろし
751デフォルトの名無しさん:2008/05/24(土) 00:19:06
今日sconsインストールしてみたが、これ今までVC8で使ってた香具師は世界に存在しないの?
IDEで指定したインクルードパスが認識されないって相当ウンコなバグだと思うんだが。
752デフォルトの名無しさん:2008/05/25(日) 19:41:49
753デフォルトの名無しさん:2008/05/25(日) 19:49:01
>>751
確かにウンコなバグだ!
問題箇所は鏡があればすぐに見つけられるだろう
754751:2008/05/26(月) 00:20:02
生憎鏡は洗面所にしかないので使ってないけど問題箇所はすぐに見つかったので一応報告はしておいた。
755デフォルトの名無しさん:2008/05/26(月) 01:21:23
>>754
姿見くらい持った方が良いと思うんだ、でもレポート乙です。
756デフォルトの名無しさん:2008/06/08(日) 22:26:26
rantというものもあるんだな・・・
色々多すぎてどれがいいかわからん><
schemeベースのやつがあればいいんだけど
757デフォルトの名無しさん:2008/06/19(木) 15:29:27
test:
[tab]ls noexistent; true

このMakefile、FreeBSDのmakeだとエラーで止まってしまう。
GNU make だと止まらない。
どっちが正しいのですか?それともこれは未定義ですか?
758デフォルトの名無しさん:2008/06/20(金) 01:47:51
パターンルールを使って *.c → *.o の生成ルールを省略したいけど、
ソースファイルごとに違うコンパイルオプションを付加したいこともある

これってどうにかしてうまくやる方法あるかなあ?
759デフォルトの名無しさん:2008/06/20(金) 01:52:54
>>758
GNU make 限定かもしれないけど、ターゲットごとに変数を設定できる。
http://www.gnu.org/software/make/manual/html_node/Target_002dspecific.html

さらに % を使ったパターンに対しても同様に設定できる。
http://www.gnu.org/software/make/manual/html_node/Pattern_002dspecific.html
760デフォルトの名無しさん:2008/06/20(金) 02:03:24
>>757
Cent OS 5にて
$ make --version
GNU Make 3.81
Copyright (C) 2006 Free Software Foundation, Inc.
これはフリーソフトウェアです. 利用許諾についてはソースを
ご覧ください.
商業性や特定の目的への適合性の如何に関わらず, 無保証です.

This program built for i686-redhat-linux-gnu
$ make
Is noexistent; true
/bin/sh: Is: command not found

止まったけど……
761デフォルトの名無しさん:2008/06/20(金) 02:08:12
>>759
マジか!
あっさりできるのか!
トン


別件だけど、もしかして GNU make ならコマンドラインから make 変数に値を追加したりできる?
variable += 〜 って Makefile 内でしかできないよね?

ちなみに今は
CFLAGS = 〜 $(OPT)
みたいにあらかじめダミーの make 変数を設定しておいて
コマンドラインから OPT= で設定してる
762デフォルトの名無しさん:2008/06/20(金) 02:21:42
>>761
コマンドライン引数の処理は Makefile の処理の前処理だから、追加は無理でしょ。
CFLAGS みたいにコマンドライン引数で設定される変数は Makefile 内では設定せずに、
ルールのコマンド内で最後に指定するのが、マナー(?)、じゃないか?
763デフォルトの名無しさん:2008/06/20(金) 11:11:39
>>760
Isじゃなくてlsです。Isだとそこでシェル全体がエラーを返してしまいます。
てかlsなんて使わないで、例としてはこれでよかったですね。

test:
[tab]false; true

こちらのGNU make も 3.81です。
764デフォルトの名無しさん:2008/06/20(金) 12:44:44
動作が違う理由は知らないけど、そういう場合はふつう
false || true
と書く。
765757:2008/06/20(金) 16:08:09
いや、これはあくまでも例示のためのコマンドで
実際はエラーかどうか関係なくtrueの部分にあるコマンドも実行してくれなきゃ困るので
||じゃだめです

これが、FreeBSDのmake がおかしいという結論なら
GNU make を使ってねというポリシーにしようかなと思っています。
766デフォルトの名無しさん:2008/06/20(金) 22:57:02
むかし、たしか「Cシェルフィールドガイド」で読んだのだが、
大昔のCシェルは&&と||の動作が逆だったらしい。
(CライクなだけにCと一緒で、0が失敗だった)

&&だったらどうなりますか。
あるいはSHELL=/bin/shと明記して実行してみるとどうなりますかね。

でもmakeで動くのはデフォルトで/bin/shだよなーJK
767デフォルトの名無しさん:2008/06/20(金) 22:57:39
だああ、&&でも||でもなく;でしたね。
768デフォルトの名無しさん:2008/06/21(土) 02:51:26
>>762
そうなん?
CFLAGS って普通はコマンドラインで指定されると仮定して
Makefile 内では設定しないものなのか…

アーキテクチャ指定とか必ず付けたいコンパイルオプションがあるのだが
769デフォルトの名無しさん:2008/06/21(土) 12:41:40
昔のDOS用のmakeにも、実行行を必ず実行コマンドとして実行しようとするものと
実行(exec)不可ならばシェルを起動してそれに渡すものがあった気がする。

つまり、実行行に";"や"&&"等が含まれる場合にシェル経由になるか(或いは自身で解釈して実行するか)は
各makeに依存するんじゃないかな。
パイプやリダイレクト等も含めて。

で、必ず複数を実行する(";"でつなげる)ならば、シェルを起動するようにしてみるとか。
最後のコマンドのステータスが必要なら、別途シェルスクリプトを書いてそれを実行するとか。
いや、うまくいくかは知らないけどね。
770デフォルトの名無しさん:2008/06/21(土) 15:22:23
>>768
コマンドラインで指定されたら Makefile 内の設定は基本的に無視されるらしい。
http://www.gnu.org/software/make/manual/html_node/Override-Directive.html

必ず付けたいのがあるなら、 override CFLAGS+=... で付けられそう。
771デフォルトの名無しさん:2008/06/21(土) 16:47:56
:= ならどうよ
772デフォルトの名無しさん:2008/06/21(土) 17:21:51
>>771 「どうよ」って、何が?
773デフォルトの名無しさん:2008/06/21(土) 18:47:50
gcc の Makefile の変数定義で = を使うところで := とする方法もあったかと思ったのだ
774デフォルトの名無しさん:2008/06/21(土) 20:51:29
>>773 そのとおりだが、それがどうした?
775デフォルトの名無しさん:2008/06/21(土) 21:11:53
>>768
make.confとかは?
776デフォルトの名無しさん:2008/06/22(日) 01:31:07
>>769
なるほど、んじゃBSD make 用になにか考える方向ですかね…
777デフォルトの名無しさん:2008/06/26(木) 03:49:36
shell scriptでは、

cat <<EOF > doc.txt
hoge
EOF

とすれば、中身がhogeのdoc.txtが生成されます。
しかしMakefileの中で、
doc:
cat <<EOF > doc.txt
hoge
EOF
とやっても、
$ make doc
make: hoge: Command not found
となってしまいます。
どうやったら、shellと同様の操作をMakefileの中で行えますか?
778デフォルトの名無しさん:2008/06/26(木) 08:37:19
1行ずつ$SHELLで解釈されるから、
[TAB]echo hoge > doc.txt
[TAB]echo hoge2 >> doc.txt
くらいしか思いつかね。
779デフォルトの名無しさん:2008/06/26(木) 11:01:50
>>777
シェルスクリプトを呼び出すのはダメ?
780777:2008/06/26(木) 13:47:45
>>778-779
ありがとうございます。
実際にはあるソフトを立ち上げて、
それにコマンドを打ち込むという作業なので、
結局shell scriptを作りました。
781デフォルトの名無しさん:2008/06/29(日) 07:06:00
すみません。皆さんの力をかしてください。
makeを長い事使っているのですが、あんまり踏み込んで使った事はありません。
今回もこった事をするつもりはなかったのですが、なんか基本的なことでつまずいてしまって困っています。
以下の例のように、Makefileがあるディレクトリとは別のディレクトリに
ソースコードがあり、コンパイルしてできるオブジェクトも別ディレクトリに
置きたいという状況で、暗黙のルールを使うと以下のように nothing to be done
といわれてなにもコンパイルしてくれません。なぜダメなのかまったく理解できません。
srcかobjをやめたり、暗黙のルールをやめれば期待通りにコンパイルしてくれるのですが、今回それはやめられないので困っています。
暗黙のルールを使うのは、なにか別の方法で同じことができればそれでもよいのですが...make gruのアドバイスをお願いします。
782デフォルトの名無しさん:2008/06/29(日) 07:06:33
$ cat /etc/redhat-release
CentOS release 5 (Final)
$ make -v
GNU Make 3.81
This program built for i686-redhat-linux-gnu
$ cat Makefile
%.o: %.c
cc $< -o $@
all: obj/foo.o
obj/foo.o: src/foo.c
$ ls -lR
.:
total 24
-rw-r--r-- 1 hunya hoge 83 Jun 29 05:21 Makefile
drwxr-xr-x 2 hunya hoge 4096 Jun 29 05:21 obj
drwxr-xr-x 2 hunya hoge 4096 Jun 29 05:22 src
./obj:
total 0
./src:
total 8
-rw-r--r-- 1 hunya hoge 29 Jun 29 05:22 foo.c
$ make
make: Nothing to be done for `all'.
783781:2008/06/29(日) 09:31:13
自己解決しました。

パターンルール %.o: %.c は obj/foo.o: src/foo.c にマッチしないようです。
パターンを obj/%.o: src/%.c に変更すると期待の動作をするようになりました。
実際には以下のように書く事にします。

OBJDIR=obj/
VPATH=src

${OBJDIR}%.o: %.c
${CC} -c $< -o $@

{OBJDIR}foo.o: foo.c

今回も人にきちんと質問すると自己解決することがあるという典型例でした。。。
あと一晩寝ると解決するともいう。
皆さんありがとうございました。
784デフォルトの名無しさん:2008/06/29(日) 11:54:38
ディレクトリを移動してmakeするようにmakefileを書けばいいと思ったらそういう解決策を見つけたか。
なるほど。
785デフォルトの名無しさん:2008/07/12(土) 18:13:03
中括弧かっこいい
786デフォルトの名無しさん:2008/07/12(土) 19:51:50
>>785
貴様!小括弧派の回し者か!
787デフォルトの名無しさん:2008/07/13(日) 00:37:04
角括弧こそがカクイイ。
788デフォルトの名無しさん:2008/07/13(日) 11:28:45
せっかくだから俺はこの中空鉤括弧を選ぶぜ
789デフォルトの名無しさん:2008/07/13(日) 12:55:37
カーリーブレイス・・・
鉄の絆・・・
790デフォルトの名無しさん:2008/07/18(金) 13:18:31
builditってのもあるのか
色々あるんだなぁ
791デフォルトの名無しさん:2008/07/18(金) 19:09:33
buildbotとかいうのもあったぞ
確かPython製
792デフォルトの名無しさん:2008/07/18(金) 19:34:24
makeの書き方わからなくて修正できないヽ(`Д´)ノウワァァン
793デフォルトの名無しさん:2008/07/18(金) 19:44:56
Makefileといわずにmakeとな
794デフォルトの名無しさん:2008/07/18(金) 20:56:05
あぁMakefileだわ・・・
makeはバイナリであるね・・・
795デフォルトの名無しさん:2008/07/18(金) 22:15:32
最近、コンパイルコマンドが並んだだけのスクリプト(バッチ)を
実行することをmakeと呼んでいる状況に遭遇した不運な香具師は
いる?
796デフォルトの名無しさん:2008/07/19(土) 03:09:35
それをビルドと呼ぶ馬鹿はいた。
797デフォルトの名無しさん:2008/07/19(土) 10:14:47
runhaskell configure
runhaskell build
runhaskell install
798デフォルトの名無しさん:2008/07/19(土) 13:31:31
> それをビルドと呼ぶ馬鹿はいた。

ビルドに明確な定義があるか?
コンパイルとかリンクとは根本的に違うだろ
799デフォルトの名無しさん:2008/07/19(土) 16:29:51
コンパイルやリンクの手順をスクリプトに書いて、それを実行する事を
ビルドと呼ぶのは、とても正しい気がする。
800デフォルトの名無しさん:2008/07/19(土) 19:10:12
IDE上でコンパイルするとビルド?
801デフォルトの名無しさん:2008/07/19(土) 19:34:45
python setup.py --configure
python setup.py --build
python setup.py --install
802デフォルトの名無しさん:2008/07/26(土) 11:34:59
ビルドの負荷を軽減させるためにできたのがmakeだからな
803751:2008/08/14(木) 11:45:37
scons1.0.0が出たがバグが修正されていなかった件について

いいのかよそれで
804デフォルトの名無しさん:2008/08/14(木) 20:50:54
誰も報告しなけりゃそのままだろうな
805751:2008/08/14(木) 21:56:59
だから報告したんだってばさ。 優先度高いから直すよって返事までもらったのに。
806デフォルトの名無しさん:2008/08/14(木) 22:10:58
>>804
>>754で報告したと書いてあるんだな。

807デフォルトの名無しさん:2008/08/15(金) 12:02:49
おぉ、それはすまなかった。
808デフォルトの名無しさん:2008/09/13(土) 11:14:31
lispのdslとして実装されたMake replacementは無いんですか?
rakeやsconsのscheme, common lisp版みたいなの
なかったら自分で作りたいぐらいに欲しいのですが、もうあるよというならば情報おねがいします
809デフォルトの名無しさん:2008/09/13(土) 17:24:02
cokeとかpepsiみたいなのの派生みたいなのでありそうだけどな
810デフォルトの名無しさん:2008/09/13(土) 22:09:53
働いたらmakeだと思っています
811デフォルトの名無しさん:2008/09/13(土) 22:12:55
>>810
alias kachi "make"
812デフォルトの名無しさん:2008/09/13(土) 23:38:44
>>749
俺は2ちゃんなどの掲示板の書き込みなら文末の句点は省略されてても気にしないがな。
それより適当な位置で改行し、適度に読点を入れて欲しい。
813デフォルトの名無しさん:2008/09/13(土) 23:46:10
先輩お願いです、すっげぇでっかくなったMakefileにこっそりlove:を入れるのやめてください
814デフォルトの名無しさん:2008/09/15(月) 00:54:31
>>808
つ DEFSYSTEM, ASDF
815デフォルトの名無しさん:2008/11/08(土) 19:25:09
最新のcygwinを使ってます。
以下の実装で以前は動いていたんですが、最近
--------------------------------------------------------
%.obj: %.cpp
@echo $<
@if [ ! -d dotDep ]; then mkdir dotDep; fi
@$(CC) $(CFLAGS) /showIncludes /TP /c /Fo$@ $< > dotDep/$*.d0 \
|| ( $(SED) -e '1{/$</d;}; /^Note: including file:/d' dotDep/$*.d0; exit 1)
@$(SED) -e '1{/$</d;}' \
-e '/^Note: including file:/d' dotDep/$*.d0
@(echo '$@: \' \
&& $(SED) -ne '/^Note: including file:/ { \
s|\\|/|g; \
s/^Note: including file:[ ]*//; \
s/$$/ \\/; \
s|^\(.\):| /cygdrive/\1|; \
p; \
}' dotDep/$*.d0 \
&& src=`$(SED) -ne '/^#line 1 /{s/.*"\([^"][^"]*\)".*/\1/; h;}' \
-e '8{x;p;q;}; $${x;p;q;}' $<`; \
&& echo "$${src:-$<}") > dotDep/$*.d1
@mv dotDep/$*.d1 dotDep/$*.d
------------------------------------------------------------------

/bin/sh: -c: line 10: syntax error near unexpected token `&&'
/bin/sh: -c: line 10: ` && echo "${src:-game.cpp}") > dotDep/game.d1'

実行すると上記のエラーになります。
どこが間違ってるのでしょう?
816デフォルトの名無しさん:2008/11/08(土) 20:10:44
make関係なくね
817デフォルトの名無しさん:2008/11/10(月) 12:59:43
>>815
改行文字はどうなっている?
818デフォルトの名無しさん:2008/11/16(日) 01:17:43
改行文字というか、エンコードをeuc-jp-unix,euc-jp-dos,shift-jis-dos,shift-jis-unix
でためしても同じエラーが出る
構文かな?
819デフォルトの名無しさん:2008/11/16(日) 01:26:17
うちじゃ改行文字がlfのみでもcrlfでも問題なくコンパイルするな。
$ make --version
GNU Make 3.81
Copyright (C) 2006 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.
There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A
PARTICULAR PURPOSE.

This program built for i686-pc-cygwin

$ uname -a
CYGWIN_NT-5.1 achernar 1.5.25(0.156/4/2) 2008-06-12 19:34 i686 Cygwin
820デフォルトの名無しさん:2008/11/16(日) 01:28:22
あれはmakeが吐いてるエラーじゃなくて、シェルが吐いてるエラーでしょ。
821デフォルトの名無しさん:2008/11/16(日) 09:27:14
>>815
make -nでコマンド行をプリントさせて、
それをshで実行してみる。そしてデバッグ。
822デフォルトの名無しさん:2008/11/17(月) 17:25:51
複数のディレクトリに分けたソースから一つのDLLを生成するMakefileはどうやってかく?
例:
main/sub1/ソース
sub2/ソース
sub3/ソース
main.dll <-sub1,2,3からこの階層へdllを生成
823デフォルトの名無しさん:2008/11/17(月) 18:09:07
>>822
sub1、sub2、sub3のMakefileでオブジェクト生成、mainのMakefileでそれらのmakeの起動とライブラリ化でいいんじゃね?
824デフォルトの名無しさん:2008/11/26(水) 02:41:36
>>822

コンパイルオプションがバラバラならば>>823のようにするが、
一緒ならば単純に以下のようにする。

SRCS= ¥
main/sub1/ソース.c
sub2/ソース.c
sub3/ソース.c

vpathは使わない。
825デフォルトの名無しさん:2008/11/26(水) 02:42:36
>>824
¥ がぬけてた。

SRCS= ¥
main/sub1/ソース.c ¥
sub2/ソース.c ¥
sub3/ソース.c ¥
826デフォルトの名無しさん:2008/12/11(木) 05:37:06
MAKEFILEでどうしても分からない事がありますので、 お教え願いたいのですが。
#-------------------------------------- リンカ(GUI)
linkexe = $(linkopt) -Tpe -aa
#-------------------------------------- リンカ(CONSOLE)
linkcon = $(linkopt) -Tpe -ap
#-------------------------------------- リンカ(DLL)
linkdll = $(linkopt) -Tpd -aa

linkconとlinkdllのマクロが使用されている箇所が、
この行以下にはありません。
しかし、linkconとlinkdllの記載を削除すると、リンク時にエラーが出ます。

$(name)T.EXE: FOO1.OBJ $(sobj) $(name)T.RES
$(linkexe) @&&|
$(C0GUI) FOO1 $(sobj)
$(linkout)$.
!if $(UseBCC)
$&
$(DebugLib) NOEH32 IMPORT32 CW32
!endif
$&.RES
|

質問
@リンクエラーでは、 $(linkexe) @&&| という部分に関係がしていると思われるのですが、
@&&| の意味が分かりません。この意味について教えて頂けませんでしょうか。
または参考になるサイトがあれば、そちらを教えて頂きたいです。

A$(linkout)$.
$. の意味も分かりません。
827デフォルトの名無しさん:2008/12/11(木) 09:32:40
borlandのmakeでは
&&|から行頭|までがファイルに書き出されてファイル名が渡されるはず。
リンカのコマンドラインオプションに@ファイル名ってのがあるでしょ。

$.は実際に.silentとか削ってみてみれば見当つくんじゃないの。知らないけど。
828826:2008/12/11(木) 22:13:03
>>827
ご回答ありがとうございます。

しかし、linkconとlinkdllの記載を消すと、
何故エラーが出るかがまだ理解できていません。

linkconとlinkdllは定義されているだけで、
どこでも使われていない感じなのです。
829デフォルトの名無しさん:2008/12/12(金) 02:27:37
>>828
-p とか見てみたら?
830デフォルトの名無しさん:2008/12/13(土) 04:51:52
OMake ってここできいていい?
最初から用意されている $(CProgram )
とかじゃなくて、自分で g++ ほげほげ
と書きたいんだけど、どうやったらいいのでしょう?
Windows 環境だと、Visual C++ の cl.exe が $(CProgram )
に設定されているみたいなんですよね。
mingw の g++ が使いたい。
831デフォルトの名無しさん:2008/12/13(土) 06:08:51
>>830
簡単には答えられないし、いくつもの答えがありううので、>1 に紹介されているサイトで勉強した上で、分からないところを質問してくれると、より具体的な返答があると思うよ。
832デフォルトの名無しさん:2008/12/13(土) 07:36:25
>>831
>1 では OMake は触れていないような。
833デフォルトの名無しさん:2008/12/13(土) 17:21:27
ところで、
makefileの「コマンド行」では(マクロ)変数の代入は行えないんでしょ
うか? 行っても反映されないようですが。
834デフォルトの名無しさん:2008/12/14(日) 01:29:51
>>833

世の中にそれを行えるmakeがないかどうかは分かりませんが、
普通は行えないと思いますよ。
やっても反映されないとのことですが、コマンドは子プロセスのシェルで
実行されるので、Makefileの変数にはなんの影響もないはず。
835デフォルトの名無しさん:2008/12/14(日) 02:51:39
>>833
ところで、make all CC=gcc みたいな話ではないのかな?
836デフォルトの名無しさん:2008/12/14(日) 09:50:36
>>833
依存関係をmakeの起動時に静的に決定するために、
それは出来ません。
837デフォルトの名無しさん:2008/12/14(日) 11:56:27
特定のターゲット(とそれが依存するファイル群)のみに変数を設定したい場合、GNU make なら

target: CC=gcc

みたいなことも可能。
838デフォルトの名無しさん:2009/03/10(火) 23:27:37
仕事でGNUmake使ってますがmake初心者です。
なんとなくって感じでシンプル、エレガントに書けないです。
とりあえずオライリーで体系的に勉強しようと思ったのですが
どちらから読むのがお奨めですか。
ttp://www.amazon.co.jp/make-改訂版-アンドリュー-オラム/dp/4900900605/ref=pd_sim_b_3_img
ttp://www.amazon.co.jp/GNU-Make-ロバート-メクレンバーグ/dp/4873112699/ref=pd_sim_b_2_img
839デフォルトの名無しさん:2009/03/13(金) 00:49:10
ぶっちゃけ、makeは欠陥品だから、エレガンスを求めて苦しまない方が得策だよ。

その本は両方読んだけど…
make: わかりやすいが、gmakeに特化していない分、他のmakeのポータビリティを
求めないなら要らない内容が多く、より便利な(ポータブルでない)内容が少ない。
GNUmake: gmake固有の便利機能や高度な使用法はいろいろ書いてあるが、いまいち
散漫な内容で網羅的でない。読後にリファレンスとしても使いにくい。
って感じ。

まぁ一つ言えることは、無理に全部makeで処理しようとしないことか?
普通にcソースをコンパイルしてリンクして…って部分はmakeにやらせてもいいが、
他の独自の複雑な処理は、よほど再ビルドに時間がかかるのでなければ、
シェルスクリプトで書いて、ビルドするたびゼロから作り直すように
割り切ってしまう方が作るのもメンテするのも楽だよ…。
840デフォルトの名無しさん:2009/03/17(火) 08:57:03
makeで書くと並列処理が簡単にできるから最近#!/usr/bin/makeな
スクリプトを書く機会が増えてるな・・・
841デフォルトの名無しさん:2009/04/29(水) 06:55:00
Intelコンパイラを使っています
Core2系とOpteron系のマシンがあるのですが、コンパイル時に
それぞれのマシンに合わせてオプションを変えたいのですが、
どのようにマシンを判別すればよいのでしょうか?
842デフォルトの名無しさん:2009/04/29(水) 09:31:22
小出し厨キタ
843デフォルトの名無しさん:2009/04/29(水) 17:53:06
環境変数をだな
844デフォルトの名無しさん:2009/04/29(水) 20:41:51
全部手動でやればおk
845デフォルトの名無しさん:2009/04/30(木) 09:45:36
>>841
-axOWPTQみたいなオプションじゃダメなんか?
846デフォルトの名無しさん:2009/04/30(木) 23:35:53
-xHost でいいじゃん
847デフォルトの名無しさん:2009/05/10(日) 18:04:31
>>815
> -e '8{x;p;q;}; $${x;p;q;}' $<`; \
> && echo "$${src:-$<}") > dotDep/$*.d1
前の行の最後のセミコロンが余計
848デフォルトの名無しさん:2009/06/01(月) 11:17:55
make hogeとやるとhoge:というターゲットに該当する箇所が実行されますが
make hogeとやった時にターゲットではなく
hogeという名称のファイルに対して処理をさせたい場合
どのように記述すれば良いのでしょうか
環境はGNU make 3.81です
849デフォルトの名無しさん:2009/06/02(火) 01:05:55
alias make='make -f'
とエイリアスをはるか、諦めてくれ
850849:2009/06/02(火) 01:15:40
質問の意図を汲めてない可能性があるので補足しとく

hoge: hoge
(ターゲット): (ファイル名)
851デフォルトの名無しさん:2009/06/02(火) 10:37:04
>>849 ありがとう。しかし、makefileは修正しないつもりで書きました
結局環境変数を使う方法でうまくいきました
OREORE ?= defaultvalue
main:
$(OREORE)使用コード
852デフォルトの名無しさん:2009/06/02(火) 15:34:15
どのように記述すれば良いのか、を聞いておいてmakefileは修正しないつもりって・・・
まぁ解決したならいいけど
853デフォルトの名無しさん:2009/08/10(月) 21:49:34
age
854デフォルトの名無しさん:2009/08/11(火) 00:57:43
GNU makeで以下のようなMakefileを書いたらa.cは生成されますが、a.oが生成されません。
なぜa.oが生成されないのでしょうか?

#中間ファイル
.INTERMEDIATE: ./sub/src/a.c

a.elf : ./sub/obj/a.o ./sub/obj/b.o
    cat $+ > $@

#./xxx/src/.c -> ./xxx/obj/.o
%.o : $(addsuffix /%.c, ../src)
    cp $< $@

./sub/obj/a.o : ./sub/src/a.c
./sub/obj/b.o : ./sub/src/b.c

#./xxx/blk/*.lst -> ./xxx/blk/*.c
./sub/src/a.c : ./sub/blk/a.lst
    cp $< $@

855デフォルトの名無しさん:2009/09/04(金) 23:28:46
【電気機器】「make.believe」 ソニーが新ブランドメッセージ[09/09/04]
http://anchorage.2ch.net/test/read.cgi/bizplus/1252031294/
856デフォルトの名無しさん:2009/09/23(水) 04:13:38
コンパイルしている環境(linuxなのかwindowsなのかmacなのかなど)を取得して、
それにあわせて、コンパイラやコンパイルオプションを変更する方法を教えてください。
857デフォルトの名無しさん:2009/09/23(水) 04:23:49
>>856
簡単なのは arch とか uname の出力を見て(やり方はMakeの種類
ごとに異なる)条件判断の上変数をセットする。

本格的にやるなら GNU autotools というバッドノウハウの塊を使う。
858856:2009/09/23(水) 06:37:55
>>857
ありがとうございます。
どこかに簡単なので良いのでサンプルはないでしょうか?
859856:2009/09/23(水) 06:55:56
unameでやっているのですが、
OS = $(shell uname -s)
と最初に書いたのですが、nmakeで旨く通りません。
860デフォルトの名無しさん:2009/09/23(水) 10:52:15
all:
echo set CC=cl > compile.bat
echo set CFLAGS=xxxx >> compile.bat
echo nmake -f main.nmk >> compile.bat
echo export CC=gcc > compile
echo make -f main.mk >> compile
!chmod a+x compile
./compile
861デフォルトの名無しさん:2009/09/23(水) 11:23:45
./compileじゃダメだね。もう一工夫必要。
862デフォルトの名無しさん:2009/09/23(水) 11:52:00
>>859
nmakeって $(shell ...) 使えるん?
863デフォルトの名無しさん:2009/09/23(水) 12:17:26
そもそも、SFUいれてなきゃunameが無い。
864デフォルトの名無しさん:2009/09/24(木) 17:51:04
NTなら最初から%OS%って定義されてなかったっけ
865デフォルトの名無しさん:2009/09/26(土) 20:39:32
> echo %os%
Windows_NT
866デフォルトの名無しさん:2009/09/29(火) 11:30:35
subsystem:
$(MAKE) -C absolutepath

Makefileからカレントの下層ではないフォルダにあるMakefileを呼び出したいと思っています。
しかし、subsystemで指定したフォルダの中にあるMakefileだけが実行されて、subsystemの記述より下に書いてあるコマンドが実行されなくなってしまいます。
どうすればいいのでしょうか?
867デフォルトの名無しさん:2009/09/29(火) 11:33:38
>>866
それだけ読むと「subsystemの記述より下に書いてあるコマンド」が実行されるのに十分な
指定をしてるのかどうかわからん。

どんな Makefile を書いてどんなコマンドラインで実行したときに、そのコマンドが実行される
ことを期待しているの?
868デフォルトの名無しさん:2009/09/29(火) 12:45:40
>>867
まずsubsystemでlibを作成します。
次に「subsystemの記述より下に書いてあるコマンド」ですが、libへのリンクを含むビルドです。
どちらも別々に実行すればうまくいきます。
869デフォルトの名無しさん:2009/09/29(火) 12:46:55
>>868 あ、そう。でもやっぱり(以下 >867 と同文
870デフォルトの名無しさん:2009/09/29(火) 12:48:05
makefileを張れないなら一昨日来やがれです〜
871デフォルトの名無しさん:2009/09/29(火) 14:56:30
>>869
compiler = dmd
flag = -g -unittest

subsystem:
$(MAKE) -C C:\hoge\fuga\mylib

foo: foo.d
$(compiler) $(flag) mylib.lib $<
872デフォルトの名無しさん:2009/09/29(火) 15:03:56
-fでMakefile渡してやらなきゃ。
873デフォルトの名無しさん:2009/09/29(火) 15:38:39
>>872
-fで指定するというのは、make実行時?それともsubsystemの中でしょうか?
また、そこでどっちのファイル名を指定すればいいのかも分かりません。
Makefileのファイル名は2つともMakefileなので、-fで指定する必要はないと思うのですが。

874デフォルトの名無しさん:2009/09/30(水) 02:12:18
make -n
make -n subsystem
の出力は?
875デフォルトの名無しさん:2009/09/30(水) 04:40:30
>>871
それが Makefile 全体ってことでいいの?
で、コマンドラインは?
実行したときに表示されるメッセージは?
876デフォルトの名無しさん:2009/09/30(水) 07:07:04
>>875
fooをビルドするためのMakefileはこれで全部です。

make -C C:\hoge\fuga\mylib
make[1]: Entering directory `C:\hoge\fuga\mylib'
/* ここでC:\hoge\fuga\mylib\Makefileが期待通りに実行される */
make[1]: Leaving directory `C:\hoge\fuga\mylib'

というメッセージが出て、C:\hoge\fuga\mylib\Makefileで期待した通り、
mylib.libは作成されますが、fooに関しては何も実行されません。

1つ勘違いしていたのですが、subsystemは予約語のような物ではないんですね。
しかし、mylib.libに変えてみても結果はかわらず・・・。

>>874
-nを付けないでやった時と同じ出力になりました。
877876:2009/09/30(水) 07:09:42
1つ忘れていました。
Makefileの実行は、コマンドプロンプトでカレントディレクトリをfoo.dがあるフォルダに変えたあと、
make
と打ちました。
878デフォルトの名無しさん:2009/09/30(水) 11:41:27
>>876-877
ゴールを指定してないときは、一番最初に見つかったルールのターゲットがゴールとされる。
その結果で仕様どおり。
879デフォルトの名無しさん:2009/09/30(水) 13:37:34
>>876
いやいや、元のMakefileがあるところで
make subsystem
とやって欲しかったんだけど
880デフォルトの名無しさん:2009/09/30(水) 13:57:39
>>878
つまり>>871のsubsystemとfooの順番を入れ替えるということですよね?
これも試してはみたんですが、今度はfooが作成されてmylib.libが作成されなくなってしまいます。
C:\hoge\fuga\mylib\Makefileを単独で直接実行すればmylib.libが作成されるんですが謎です。
また、fooのMakefileのカレントで>>879を実行すると、mylib.libが作成されてfooが作成されません。
881デフォルトの名無しさん:2009/09/30(水) 14:03:51
882デフォルトの名無しさん:2009/09/30(水) 14:11:09
883デフォルトの名無しさん:2009/09/30(水) 14:13:49
他人が書いてくれたレスにある単語くらい調べないもんかねぇ。
ゴールが必要なのだよゴールが。
884デフォルトの名無しさん:2009/09/30(水) 14:14:50
It makes a person who uses make make.
885デフォルトの名無しさん:2009/09/30(水) 14:18:53
gallを狙え
886デフォルトの名無しさん:2009/09/30(水) 14:35:05
>>882-883
「ゴール」が用語だとは思いませんでした。
複数のターゲットをゴールにする事ができるんですね。

今気づいた事なのですが、単純に依存の書き忘れでした。
foo: foo.d
$(compiler) $(flag) mylib.lib $<

foo: foo.d mylib.lib
$(compiler) $(flag) mylib.lib $<
に変えたらうまくいきました。
どうもありがとうございました。
887デフォルトの名無しさん:2009/09/30(水) 15:17:35
>>866
> subsystemの記述より下に書いてあるコマンド
って
$(MAKE) -C absolutepath
じゃなかったんだな。。
888デフォルトの名無しさん:2009/09/30(水) 15:43:30
867以降の流れを見ればそれはないだろw
889デフォルトの名無しさん:2009/10/03(土) 09:27:49
サフィックスルールを使って、ソースを1つずつコンパイルしてオブジェクトファイルにするようにMakefileを書くと、
2回目以降のビルドの時、更新されたソースのみコンパイルされるようになりますよね。
更新されたソースを検知する仕組みってどうなっているんですか?
890デフォルトの名無しさん:2009/10/03(土) 13:05:43
例えば*.cからは*.oが生成される(*NIXの場合)わけだが、
その両者のタイムスタンプを比べれば、*.oが生成された後に*.cが修正されたかどうか判るべ?
891デフォルトの名無しさん:2009/10/03(土) 14:42:28
>>890
なるほど。
となるとcleanでオブジェクトファイル消したら意味なくなっちゃいますね。
892デフォルトの名無しさん:2009/10/03(土) 15:03:13
cleanは掃除用ターゲットではあるが、全ビルドしなおしの準備でもある。
893デフォルトの名無しさん:2009/10/03(土) 18:40:58
*.cよりも新しい*.oがなければ実行する、だから
894デフォルトの名無しさん:2009/10/04(日) 16:00:44
>>889の方法で更新されたソースのみコンパイルされるようにしているのですが、リリース用、デバッグ用にコンパイル引数を変えた時に困ります。
Makefileを2つ書くのは保守が面倒だし、上手い方法はないでしょうか?
895デフォルトの名無しさん:2009/10/04(日) 16:12:27
>>894
生成物を置くディレクトリをリリース用、デバッグ用で分ける。
make起動時にモードを変数で指定(無指定ならデバッグモードになる、とかも)
コンパイルフラグや生成物のパスを記述するときにその変数の値を考慮する。
896デフォルトの名無しさん:2009/10/04(日) 16:13:14
>>894
リリース用のオブジェクトとデバッグ用のオブジェクトをわけておけば問題ないはず。
897デフォルトの名無しさん:2009/10/04(日) 16:41:23
bjam使うとその辺勝手にやってくれるよ。
898デフォルトの名無しさん:2009/10/04(日) 17:17:32
レスthx

>>895,896
いずれにしても、make起動時に引数で渡して、パスやらファイル名を変えると言う事ですね。
>>897
ビルドツールは便利ですね。
でも、わけあって使えないんです><
899デフォルトの名無しさん:2009/10/04(日) 18:31:36
>>898
> いずれにしても、make起動時に引数で渡して、パスやらファイル名を変えると言う事ですね。
なんか誤解してないか?

確かに起動時に引数を渡して切り替えるんだが、 make PATH=./debug じゃなくて、
make debug とかそういう切り替え方法だぞ。
900デフォルトの名無しさん:2009/10/04(日) 21:08:54
>>899
make起動時に渡すのはマクロではなく、ターゲットと言う事ですか?
こうする事によるメリットとは何ですか?
901900:2009/10/04(日) 21:18:07
あーそれとも起動時の引数でマクロの定義だけして、Makefileの中で条件分岐するっていうこと?
902デフォルトの名無しさん:2009/10/04(日) 21:27:20
>>900
> こうする事によるメリットとは何ですか?
指定が簡単で >894 のような問題が起こらない。

あと make に「マクロ」なんてものは無い。たぶん「変数」のことなんだろうけど。
903デフォルトの名無しさん:2009/10/04(日) 21:35:52
> あと make に「マクロ」なんてものは無い。たぶん「変数」のことなんだろうけど。


904デフォルトの名無しさん:2009/10/04(日) 22:00:33
http://www.gnu.org/software/make/manual/html_node/Using-Variables.html
> (In some other versions of make, variables are called macros.)
905デフォルトの名無しさん:2009/10/04(日) 23:38:43
make debug とできるようにするか、もしくは
make MODE=debug として中で条件で設定を変える。
906デフォルトの名無しさん:2009/10/05(月) 05:50:30
>>902,905
ターゲットで指定する方法
make debug
マクロで指定する方法
make MODE = debug

ということですよね。
私は後者を考えていました。
907デフォルトの名無しさん:2009/10/06(火) 23:42:14
質問です。
makeでwarning時の処理を書きたいと思い以下のようなコードを書いています。
hoge.exe:hoge.c
$(CC) $(CFLAGS) hoge.c 2>&1 | grep warning && (warning時の処理)

このコードでwarningが出たときの処理はうまく動くのですが、逆にwarningがでなかったとき
grepがアンマッチで1を返すことによって、なぜかmakeの処理自体がエラーとしてexitしてしまいます。
grepがアンマッチの場合でもmakeの処理を継続させるにはどのように書けばよいでしょうか?

宜しくお願いします。
908デフォルトの名無しさん:2009/10/06(火) 23:50:54
|| exit 0
として前のコマンドが0以外を返したときフォローで0を返すか、
その行のアタマ(TABの次)に - を付けて失敗を無視させる。
909デフォルトの名無しさん:2009/10/07(水) 12:14:56
hoge.o: hoge.c
このターゲットと依存はサフィックスルールで簡単にかけますよね。

hoge.o: fuga\hoge.c
では、これはサフィックスルールで書く方法ありますか?
910デフォルトの名無しさん:2009/10/07(水) 12:36:59
>>909
サフィックスルールよりも広く使える、パターンルールを使う。

%.o : fuga/%.c
911デフォルトの名無しさん:2009/10/07(水) 12:50:01
>>910
thx
これは便利。
912デフォルトの名無しさん:2009/10/07(水) 13:40:29
もう1つ。

all: fuga\hoge.o
//省略
fuga\hoge.o: hoge.c
//省略
をパターンルールで書くにはどうすればいいのでしょうか?
913デフォルトの名無しさん:2009/10/07(水) 13:42:23
>>912
応用しろよ。アホか。
914デフォルトの名無しさん:2009/10/07(水) 13:49:32
>>913
考えてはみたんですけど
all: fuga\hoge.o
によって%はfuga\hogeになりますよね。
この%をhoge.cに変える方法が分からないです。
915デフォルトの名無しさん:2009/10/07(水) 13:54:36
>>914
> all: fuga\hoge.o
> によって%はfuga\hogeになりますよね。

は?なんでそうなるの?

とりあえずググレカス
http://lmgtfy.com/?q=%E3%83%91%E3%82%BF%E3%83%BC%E3%83%B3%E3%83%AB%E3%83%BC%E3%83%AB
916デフォルトの名無しさん:2009/10/07(水) 14:12:11
>>915
君はどうなると思ったの?
917デフォルトの名無しさん:2009/10/07(水) 14:20:45
>>916
910 を見て少し考えればわかるだろうと思った。
918デフォルトの名無しさん:2009/10/07(水) 14:33:22
>>917
答えになってないな。
%にディレクトリを含むパスが渡されるのはあってる。
919デフォルトの名無しさん:2009/10/07(水) 17:16:21
cfiles=$(wildcard fuga/*.c)
ofiles=$(cfiles:.c=.o)
all: ofiles

でいいんじゃねえの?
GNU make以外で通用するかは知らんが
920デフォルトの名無しさん:2009/10/07(水) 19:56:43
>>919
thx
ワイルドカードを使う方法でできました。
921920:2009/10/07(水) 21:00:35
やっぱりできていなかった。
これだとソースをまとめてコンパイルする方法になっていて、
ソースを1つずつコンパイルして再コンパイルを最小にする最初の目的とは別物でした。
うーん、これ無理なのかな・・・。
922デフォルトの名無しさん:2009/10/08(木) 01:26:09
いや、パターンルールでできるから、ふつうに。
とりあえずマニュアル読んで、書いてみた Makefile 見せてくれ。
923デフォルトの名無しさん:2009/10/08(木) 17:52:04
>>922
#方法1
all: fuga\hoge.o
#省略
fuga\%.o: %.c
#省略

#方法2
all: fuga\hoge.o
#省略
%.o: $(notdir %.c)
#省略

どちらも
*** No rule to make target `fuga\hoge.c', needed by `fuga\hoge.o'. Stop.
というエラーになります。
924デフォルトの名無しさん:2009/10/08(木) 19:46:44
そのエラーは%.cから%.oを作るルールが分からない、と言っている。

fuga\%.o: %.c
  $(CC) $(CFLAGS) -c &< -o $@
925デフォルトの名無しさん:2009/10/09(金) 01:05:40
>>923
方法1でだいたい正解なんだが、結果が妙だね。

方法1をコピペした Makefile で make を走らせると、こうなる。
make: *** No rule to make target `fuga\hoge.o', needed by `all'. Stop.
ちょっとちがうね。

ちなみに
$ make --version
GNU Make 3.81
Copyright (C) 2006 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.
There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A
PARTICULAR PURPOSE.

This program built for i686-pc-cygwin

で、 \ を / に置き換えて fuga/%.o のルールにコマンド部分書き足して、
hoge.c をカレントディレクトリに置いてやると、普通に成功する。

何が起こってるか調べたいなら make -d -r してみるといいかもしれない。
926デフォルトの名無しさん:2009/10/09(金) 10:54:20
.PHONY: hoge
hoge:
prompt hoge

.PHONY: fuga
fuga:
prompt fuga

.PHONY: piyo
piyo:
prompt piyo

hogeしか実行されません。
3つ実行するにはどうすればいいですか?
927デフォルトの名無しさん:2009/10/09(金) 11:43:16
「makeとだけ実行したらhogeしか実行されなかった」という意味か。

引数なしで実行すると最初に見つけたターゲットだけ実行するから、
どのターゲットよりも前に
all: hoge fuga piyo
と書く、でいいんじゃね?
928デフォルトの名無しさん:2009/10/09(金) 12:14:44
>>927
どうもです。
うまくいきました。
929デフォルトの名無しさん:2009/10/09(金) 19:43:30
>>924,925
すみませんエラーを写し間違えていました。
> make: *** No rule to make target `fuga\hoge.o', needed by `all'. Stop.
このエラーでした。

そして\を/に変えたらエラーはでなくなりました。
ありがとうございました。。
930デフォルトの名無しさん:2009/10/24(土) 07:36:43
cygwinのgnu makeでVisula C++のclを使ってコンパイルしようとしています。
gnu makeで
.cpp.obj:
    $(CC) -c $<
hoge.obj: hoge.h

とすると、
make: Nothing to be done for `hoge.obj'
と出てしまいます。

.cpp.o:
    $(CC) -c $<
hoge.o: hoge.h

と書くと、コンパイルはされます。(生成されるのはhoge.objですが)

.cpp.obj:
    $(CC) -c $<
hoge.obj: hoge.h
でも、nmakeならコンパイルされます。
なぜgnu makeでobjと書くとうまくいかないのでしょうか?
.
931デフォルトの名無しさん:2009/10/24(土) 11:12:47
>>930
.SUFFIXES: .obj
932デフォルトの名無しさん:2009/10/24(土) 19:59:28
>>930
変にサフィックスルールを使おうとしてうまくいってない感じだね。
ちょっと前に出てるパターンルールで書いたほうがいいよ。
933デフォルトの名無しさん:2009/11/02(月) 04:49:57
メイク便利過ぎワロタwwwwwwwww
アニラジをwavで録音して番組毎に分割した後、

全部をoggに変換してタグ付けして
Winampのメディアライブラリ管理フォルダに移して
元のwav消去まですんのすんげー怠かったけど
メイクのお陰で後者の行程全自動化した
うはwwwwww空いた時間でコーヒー呑むwwwwww
934デフォルトの名無しさん:2009/11/02(月) 11:32:23
>>933
すなおにおめでとうと言いたい。
935デフォルトの名無しさん:2009/11/02(月) 11:37:18
そんな使い方あったのか
じゃあ漏れは動画のダウンローダーを作ってみる
936デフォルトの名無しさん:2009/11/02(月) 12:52:19
私が使っているデジカメは、画像のタイムスタンプを閲覧時に回転させると更新してしまう。
PCに取り込んだ後に整理するのが面倒なので、新しいものだけ内部タグのタイムスタンプに戻す処理をmakeでやっている。
時限処理ならタスクでいいけど、タイムスタンプを比較するときは(色色融通が利かなくても)makeがいいね。
937デフォルトの名無しさん:2009/11/02(月) 19:30:31
>>933
よくやったwwww

pythonやらrubyやらのLL言語をやるともっと幸せになれると思うが。
938デフォルトの名無しさん:2009/11/03(火) 04:40:49
makeのコンパイル以外の便利な使い方を教えてください。
939デフォルトの名無しさん:2009/11/03(火) 05:32:32
makeはコンパイラじゃないが
940デフォルトの名無しさん:2009/11/03(火) 05:40:57
質問よく読め
941デフォルトの名無しさん:2009/11/03(火) 12:20:59
変換
時間因果関係依存ファイル操作
942デフォルトの名無しさん:2009/11/04(水) 13:48:32
複雑にtouchしないと解けないパズルを
makeで作ることも出来るかもしれんな
943デフォルトの名無しさん:2009/11/05(木) 02:48:15
   make
+ makes
+  many
= problems

覆面算をmakeで解いてください
944デフォルトの名無しさん:2009/11/05(木) 07:42:06
5桁以下の3数の足し算が8桁になるものか。
945デフォルトの名無しさん:2009/11/15(日) 00:33:08
wildcardでファイル名の一覧を取る時、下位フォルダの中のファイルもまとめて取る事ってできないでしょうか?

例えばカレントフォルダの中にhogeフォルダとfugaフォルダがあるとして、両フォルダの中のファイル名の一覧を取得しようと思うと
src = $(wildcard hoge/*.c) $(wildcard fuga/*.c)
のようにフォルダ毎にwildcardで取得する方法が思いつきますが、1回のwildcardで取得する方法はないでしょうか?
946デフォルトの名無しさん:2009/11/15(日) 05:03:41
>>945
GNU makeだっけ?
$(wildcard hoge/*.c fuga/*.c)
とかいう話?

infoによると {hoge,huga}/*.c は不可のようだが。
947デフォルトの名無しさん:2009/11/15(日) 06:13:34
$(wildcard */*.c)
948デフォルトの名無しさん:2009/11/17(火) 15:08:16
レス遅れてすみません。

>>946
フォルダを入力しないといけないのが面倒くさいんですよね。保守の面でも。

>>947
*を何回も使えるのは知りませんでした。
しかし、カレントフォルダの下位フォルダも含めて.cファイルを全部取ろうとすると
$(wildcard *.c */*.c */*/*.c */*/*/*.c)
のように階層の深さだけ書かないといけないのがちょっと不満です。
一発で綺麗に書く方法はないんでしょうか?
949デフォルトの名無しさん:2009/11/17(火) 15:28:29
shellでfind
950デフォルトの名無しさん:2009/11/17(火) 17:03:44
>>949
make自体の機能にはないんですね。
ありそうでないんだなぁ。
951デフォルトの名無しさん:2009/11/18(水) 11:38:22
>>950
考え方が逆。Unix系はいろんなツールを組み合わせて使うのが常道だから、外部ツールを使えばいいだけ。
952デフォルトの名無しさん:2009/11/21(土) 17:21:04
もともと有るもの全部コンパイル。という管理はmakeにはなじまない。
953デフォルトの名無しさん:2009/11/21(土) 21:27:24
もしかして $(shell ...) を知らないのか?
954デフォルトの名無しさん:2009/11/21(土) 21:37:55
>>949でがいしゅつ。
955デフォルトの名無しさん:2009/11/21(土) 22:12:43
それだと 950 や 952 の反応がおかしいと思ったんだ。
956デフォルトの名無しさん:2009/11/26(木) 10:08:53
たぶん初歩的なことだと思いますが

hoge.o: hogr.h

と書いてhoge.cppが変更された場合でもコンパイルされる理由がわかりません。
957デフォルトの名無しさん:2009/11/26(木) 10:16:53
>>956
いえ、コンパイルされませんよ
958デフォルトの名無しさん:2009/11/26(木) 10:25:38
.c.oの暗黙のルールがあるから。
.hの依存を無視するなら、Makefile無しでもコンパイルできる。

$ ls
hoge.c
$ make hoge.o
cc -O2 -pipe -std=gnu99 -fstack-protector -c hoge.c
959デフォルトの名無しさん:2009/11/26(木) 10:26:43
.c => .cppと読み替えてくれ。
960デフォルトの名無しさん:2009/11/26(木) 12:19:35
わかりやすい説明ありがとう
961デフォルトの名無しさん:2010/01/07(木) 05:26:19
Windowsのコマンドライン環境下で、もしIntelコンパイラがインストールされているならiclを
もしそうでないなら、clをつかうようにしたいのですが、Makefileはどのように書けばよいのでしょうか?
962デフォルトの名無しさん:2010/01/07(木) 10:00:41
環境変数CCにでも入れておいたらどうよ。
963デフォルトの名無しさん:2010/01/07(木) 11:07:56
nmake

!if [インテルコンパイラの存在確認] == 0
CC=icl
!else
CC=cl
!endif

!ifの条件式中でコマンドを[]で囲むとexit codeに置換される。
964デフォルトの名無しさん:2010/01/07(木) 11:20:20
>>963
早速の返信ありがとうございます。
インテルコンパイラの存在確認の部分がわからないのですが。
Windowsの場合どのように確認するのでしょうか?
965デフォルトの名無しさん:2010/01/07(木) 11:30:56
iclを実行してみてエラーを調べる。
iclがインストールされると設定されるであろう環境変数を調べるスクリプトを書く。
アプリケーションのインストール情報読むスクリプトを書く。
インストールディレクトリ決め打ちで存在確認するバッチファイルを書く。

好きなのをどうぞ。
966デフォルトの名無しさん:2010/01/07(木) 12:16:33
だからそれくらいならiccインストール時にCCをセットするだけでいいべさ。
967デフォルトの名無しさん:2010/01/07(木) 14:54:50
自動判別が必要な状況でインストール時にCCが設定できるとは思えないけどな
968デフォルトの名無しさん:2010/01/08(金) 02:34:25
管理者権限がないので、CCが設定できません(泣)
969デフォルトの名無しさん:2010/01/08(金) 12:43:48
!if [icl -help > nul 2> nul] == 0
あたりで十分だろ。
まさか95とかMEなのでcmd.exeじゃありませんとか言わんよな。
970デフォルトの名無しさん:2010/01/08(金) 12:52:17
同じく要cmd.exeだが
!if [for %I in (icl.exe) do @if "%~$$PATH:I" == "" exit 1] == 0
というのも思いついた。

この例だとメリットないと思うが、-helpみたいな何もしないで正常終了させる
オプションがないコマンドを調べるのには使えるかも。
971デフォルトの名無しさん:2010/01/08(金) 14:11:18
intel ccってインストールするとパス通すのか? vcは通さないよな。
972デフォルトの名無しさん:2010/01/08(金) 17:54:21
iclって、Win版のパラメータは /help とかじゃないのかな?
ちなみに、Linux版はインストールしても環境変数設定スクリプトが着いてくるだけ。
973デフォルトの名無しさん:2010/01/09(土) 08:18:53
Windows版も通常のコマンドプロンプトから使いたいなら自分で環境変数を追加売る必要がある
974デフォルトの名無しさん:2010/01/09(土) 09:47:33
それじゃ、まじめにやるならインストール情報を読むスクリプト組む。
手抜きならインストールパス決め打ち。
975デフォルトの名無しさん:2010/01/09(土) 10:23:38
Windowsでスクリプトって何使えばいいの?
976デフォルトの名無しさん:2010/01/09(土) 10:27:26
JScriptかVBScript
理由: わざわざインストールしないで済む。
977デフォルトの名無しさん:2010/01/09(土) 12:07:29
>>976
マイナーすぎてわからないので書いてください
978デフォルトの名無しさん:2010/01/09(土) 12:19:57
JScript, VBScriptがマイナーというのならnmakeを使うのは諦めなさい。
979デフォルトの名無しさん:2010/01/10(日) 23:28:03
IrrlichtMLをmakefileを使ってビルドしたいのですが、エラーが出てしまいます。
WindowsでMinGWを使ってるはずなのになぜ-I/usr/X11R6/includeをインクルードしてるんでしょうか・・
freetype.aをリンクさせるため、Makefileの46行目を次のように書き換えると、分離記号を欠いています出て一切動作しません。
http://etwas.wolfish.org/Irrlicht/irrlichtml.html

# Next variable is for additional scene nodes etc. of customized Irrlicht versions
EXTRAOBJ = freetype.a
LINKOBJ = $(IRRMESHOBJ) $(IRROBJ) $(IRRPARTICLEOBJ) $(IRRANIMOBJ) \
$(IRRVIDEOOBJ) $(IRRSWRENDEROBJ) $(IRRIOOBJ) $(IRROTHEROBJ) \
$(IRRGUIOBJ) $(ZLIBOBJ) $(JPEGLIBOBJ) $(LIBPNGOBJ) $(EXTRAOBJ)

↓Makefileを書き換えなかった場合(freetypeのincludeは追加した。)
C:\Documents and Settings\ユーザー名\My Documents\Visual Studio 2008\Projects\irrlicht
-1.6\source\Irrlicht>make
cc -fexpensive-optimizations -O3 -DPNG_THREAD_UNSAFE_OK -DPNG_NO_MMX_CODE -DPNG_
NO_MNG_FEATURES -I../../include -Izlib -Ijpeglib -Ilibpng -Ifreetype -I/usr/X11R
6/include -DIRRLICHT_EXPORTS=1 -c -o zlib/adler32.o zlib/adler32.c
process_begin: CreateProcess(NULL, cc -fexpensive-optimizations -O3 -DPNG_THREAD
_UNSAFE_OK -DPNG_NO_MMX_CODE -DPNG_NO_MNG_FEATURES -I../../include -Izlib -Ijpeg
lib -Ilibpng -Ifreetype -I/usr/X11R6/include -DIRRLICHT_EXPORTS=1 -c -o zlib/adl
er32.o zlib/adler32.c, ...) failed.
make (e=2): 指定されたファイルが見つかりません。
make: *** [zlib/adler32.o] エラー 2
980デフォルトの名無しさん:2010/01/11(月) 07:54:10
>>979
後者のメッセージを見ると、「ccコマンドが見付からない」
って言われているんじゃないか?
981デフォルトの名無しさん:2010/01/11(月) 09:28:53
腐ったローカライゼーションは捨てて、オリジナルの英語のエラーメッセージを
持って来い。質問はそれからだ。
982デフォルトの名無しさん:2010/01/11(月) 23:15:15
>979
おかしいと思ったのならちょっとくらい Makefile 読もうぜ。
make sharedlib_win32 staticlib_win32
983デフォルトの名無しさん:2010/01/12(火) 06:08:41
>>978
nmakeじゃなくてcygwinのmakeを使っています。
984デフォルトの名無しさん:2010/01/12(火) 06:29:29
もうすぐ次スレ
スレタイが楽しみだわ
985デフォルトの名無しさん:2010/01/12(火) 07:56:33
>>984
make組 その2
986デフォルトの名無しさん:2010/01/12(火) 10:12:41
>>985
いやああああ
>>60近辺のおされ路線でお願いします
987デフォルトの名無しさん
make makes us madがいいな