トップページ⇒tech
987コメント308KB

make makes many problems

■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさんNGNG
難しいし方言きつすぎて別の種類の 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
0002デフォルトの名無しさんNGNG
HSP使えば?
0003デフォルトの名無しさんNGNG
問答無用のウンコスレ
0004デフォルトの名無しさんNGNG
Antがアリます。
0005デフォルトの名無しさんNGNG
Antだけに
0006デフォルトの名無しさんNGNG
Antツバキは恋の花
0007デフォルトの名無しさんNGNG
あんと〜あん〜と〜
クソスレだけどスレタイ気に入った。
0008デフォルトの名無しさんNGNG
make love
00091NGNG
>>7
ありがとうございます。
日本人相手なら早口言葉としても使えます(多分)

MMMP と覚えてください。
0010デフォルトの名無しさんNGNG
HSP使えばいいのに
0011デフォルトの名無しさんNGNG
make(・∀・)キター。

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

VC++のメニューに
メイクファイルのエクスポート
ってのがあることを思い出した。
あれはイイもの?普通?クソ?
(自分が使う機会があるかどうか微妙だけどとりあえず聞いてみる)
00141NGNG
>>11, >>13
どちらかというと make を語るスレです。
なんか一個も make のスレが無かったので立てました。
0015デフォルトの名無しさんNGNG
automake使えば、makeがgmakeか、gじゃないmakeか判定して、
よきにはからってくれたようなきがする。
automakeで生成したMakefileがHI-UXのmakeでも通ったし。
0016デフォルトの名無しさんNGNG
automake・・・・
なんでmakeごときがあんなに複雑(そう)になるのかね?
0017questionNGNG
本に載っているアルゴリズムのプログラムを打ち込んでコンパイルして勉強中です。
するとディレクトリの中に短く単発のソースとバイナリがいっぱいできます。
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バイナリになっているので可能な気がします。
0018shigeNGNG
Makefileを書き換えずにやるのは無理じゃないか?
新しいファイルがディレクトリにあった場合Makefileを更新するツールを
スクリプト言語で書いた方が手っ取り早いだろう。
0019デフォルトの名無しさんNGNG
SOURCE:=$(wildcard *.cpp)
0020デフォルトの名無しさんNGNG
Antよりmakeの方が簡単
0021shigeNGNG
なるほど。
0022デフォルトの名無しさんNGNG
ascii の FTP に、GNU Make のマニュアル日本語版があるよ。
>>1 のページに書いてあるようなことは卒業した人にお勧め。
0023デフォルトの名無しさんNGNG
>>16
システムの全ての必要な要素について、
それがあるか?、またそのバージョンは?
って調べていくんだから、そりゃ大変な作業だろ。

Windowsみたいにまとまってねーんだよ。UNIXは。
微妙な差異がものすごくめんどくさい。
0024デフォルトの名無しさんNGNG
>>23
Windowsだってまとまってねーんだよ。
NTと95は全くの別物。
0025デフォルトの名無しさんNGNG
>>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])
するだけで結構うまくいったりするが、どうよ。
高度な事すると結構面倒だけどね。
0026デフォルトの名無しさんNGNG
Minix のころは make から cc よぶメモリが足りなかったら make -n > hoge; sh hoge とかできたもんだ... あの頃は simpleだったのう。
0027デフォルトの名無しさんNGNG
Antじゃダメなん?
うちの会社、ソースはC++だけどAntでビルドしてるけど、それって異端?
0028デフォルトの名無しさんNGNG
>>27
Javaならね。
UNIXはMakeの資産があるからAntが使われることはないと思う。
002927NGNG
(´-`).。oO(うちの会社は異端かぁ)
0030デフォルトの名無しさんNGNG
>>27
実行形式がJavaってだけで、動かないプラットフォームがでてくるし。
研究室の古株のDigitalUNIX(not Tru64)、IRIXの古いの、HI-UX、HP-UXあたり。
ライセンスとかハードウェアの関係で最新OSにすることはできないことが多い。
0031 NGNG
逆にJavaの開発でmake使ってる人っているんか?
0032デフォルトの名無しさんNGNG
何だってこんな糞ツールがここまで普及したんだろう?
UNIXの連中ってアフォばっかりだな
0033デフォルトの名無しさんNGNG
UNIXはもっとLispに学ぶべきだ
0034デフォルトの名無しさんNGNG
>>29
(´-`).。oO(そんな会社にいたんかぁ)
0035デフォルトの名無しさんNGNG
>>32
融通効くからじゃない?行頭のTabを忘れなければ…。
ビルドの為に手間をかけるのが面倒だったからかもしれんし。

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

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

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

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

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

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

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

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

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

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

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

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

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

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

ライブラリとかあると,なかなかそういうわけにはいかないよね.
0085デフォルトの名無しさんNGNG
検索するとautomake/autoconfサイトいっぱい出てくるんだけど
どのサイトが一番いいの?
0086デフォルトの名無しさんNGNG
あ、そうだ。
死のうっと。
0087デフォルトの名無しさんNGNG
automake win32(非cygwin)で動かしたいんだけど、互換ソフト無いですか?
シェルスクリプトみたいなので、そのままじゃ動かないですよね
0088デフォルトの名無しさんNGNG
>>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とソースの管理がウザイんでこの手を使うこともある。
0089デフォルトの名無しさんNGNG
>>78
PascalにUNITなんてものは規定されていない罠。
0090デフォルトの名無しさんNGNG
せめてデフォルトで用意されているマクロくらいは
make 間で統一されてればなーと思いませんか ?
0091 ◆k/Ubp.Kg NGNG
>>90
あー、それは確かに思うね。普段はGNU make使ってるから気にならないけど、他のmake使うと途端に困る…w
0092デフォルトの名無しさんNGNG
automakeってヘッダの依存まで調べてくれるの?
009390NGNG
あと, つい数日前まで恥ずかしながら知らなかったことなんですが,
Solaris 6 (7 かも) の /usr/ccs/bin/make の suffix rule って, 例えば
.c.o : rule っていう感じなんですね.
.c.o :
rule
ではだめみたい. 特定の make に依存しないように, デフォルトのマクロの挙動に
気を使って Makefile を書いてたけど, その努力は意外なところから破綻してしました ...
0094デフォルトの名無しさんNGNG
>>92
> automakeってヘッダの依存まで調べてくれるの?
$ gcc -M hoge.c
で出力される程度には調べてくれます。depcompが調べてくれたと思います。
0095デフォルトの名無しさんNGNG
ちょほいと勉強しようと思ったけど長すぎて読んでられないよ
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
0096デフォルトの名無しさんNGNG
>>95
> ちょほいと勉強しようと思ったけど長すぎて読んでられないよ
texinfo-4.2を使っているなら、それぞれソースを持ってきて
$ makeinfo --html auto*.texi
すると分割されるが、って、全体の長さは変わらないけどね。
GNUjdoc (ttp://openlab.ring.gr.jp/gnujdoc/)には日本語訳も
あるみたい。
0097デフォルトの名無しさんNGNG
>>75 >>77
Gnomeは単なるGUIシェルだと思ってるのか?
0098デフォルトの名無しさんNGNG
以下のようなディレクトリ構成の場合にちゃんとビルドするには
どうしたらいいでしょうか?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:
よろしくお願いします。
0099デフォルトの名無しさんNGNG
お前ら自慢の手書きmakefileのテンプレ晒して下さい。
0100デフォルトの名無しさんNGNG
>>98
なんかmakefile以前の問題のような。
望むような動作をバッチファイルで書ける?
010198NGNG
>>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 にしたいです。
■ このスレッドは過去ログ倉庫に格納されています