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

make makes many problems

レス数が950を超えています。1000を超えると書き込みができなくなります。
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 にしたいです。
0102デフォルトの名無しさんNGNG
>>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 .
0103デフォルトの名無しさんNGNG
>>98
もっと具体的に書いてくれないとわかんないよ。
010498NGNG
>>102
いやーお兄さん一本取られちゃったな。
> 望む動作をバッチファイルで実現できたら make は使いませんが…
を優先ですか、さすが!

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

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

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

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

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

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

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

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

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

みなさんありがとうございました。
0120113NGNG
別に技巧ってほどのものじゃないしスマートじゃないけどね…。
やっぱ偉い人がツッコミいれてくれないとイマイチだな…。
0121デフォルトの名無しさんNGNG
make自体スマートじゃないからどうしようもない。
それに凝ったmakefile書く奴ってく非生産的なのが多いので
makefileはシンプルに。つかVC使えよ。
0122デフォルトの名無しさんNGNG
VC厨までが出てきたか もう寝るよ
0123デフォルトの名無しさんNGNG
↑もう起きて来なくていいよ。
0124デフォルトの名無しさんNGNG
>>120
低レベルなム板で頑張っても無意味。unix板に帰ろう。
0125 NGNG
>>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
0126デフォルトの名無しさんNGNG
>>125
>$(LINK) -out:$@ $(LINK_FLAGS) $(OBJS)
-out:が思いっきり依存しちゃってるので、CPP_COMPILEとか定義する意味がない

>$(OBJDIR)\abc.obj: $(INCDIR)\abc.h
>$(OBJDIR)\def.obj: $(INCDIR)\def.h
これがかなりイマイチと感じる。
0127デフォルトの名無しさんNGNG
>>125
その Makefile まともに動かないような気がするんですが,
MS か Borland の make ではちゃんと動くんですか ?
GNU make では意図したとおりに動かないですよねえ ...
気のせいかな.
0128デフォルトの名無しさんNGNG
ほれ。検証しとらんがこんなもんだろ。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 $@
0129デフォルトの名無しさんNGNG
>>128
検証しました。
makefile 的にはあっている模様ですが、当方の cl.exe (VC6SP5)が

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

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

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

>>131
> $(SRCDIR)/%.cpp: $(INCDIR)/%.h
> <豚>$(TOUCH) $@
あまり見かけないやりかたですね。cl には gcc の -M オプションみたいのは
ないのかな?
0133デフォルトの名無しさんNGNG
makedepend.exe っつーのが存在するようですね。
http://www.google.com/search?q=cache:6G81zaaJ2fwC:hm.aitai.ne.jp/~mtani/gnuwin_2.htm+makedepend.exe&hl=ja&lr=lang_ja&ie=UTF-8
0134デフォルトの名無しさんNGNG
cygwin を使っているのですが、makefile 中で
  cd Dir
  pwd

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

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

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

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

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

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

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

target:
[TAB]cat \
[TAB] hoge hoge
0144 NGNG
>>143
here documentって知ってる?
0145デフォルトの名無しさんNGNG
>>140
\ → ;\
は試した?
0146138NGNG
>>145
返事が遅れてゴメンなさい。

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

# 仕方無いのでechoで頑張りますた。
0147デフォルトの名無しさんNGNG
Eiffel イイ!!
0148デフォルトの名無しさんNGNG
あげちゃったわけでつか。
あげちゃったわけでつか。
あげちゃったわけでつか。
あげちゃったわけでつか。
あげちゃったわけでつか。
あげちゃったわけでつか。
あげちゃったわけでつか。
あげちゃったわけでつか。








                                      氏ねよ、クソが。
0149デフォルトの名無しさんNGNG
>>1
ant
0150デフォルトの名無しさんNGNG
下のコメントのようなことがしたくて悩んでいるんですが、
どうすればいいでしょうか? お知恵を貸してください

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 $< $@
0151デフォルトの名無しさんNGNG
OFILES1 = $(DATAFILES1:.dat=.o)
OFILES2 = $(DATAFILES2:.dat=.o)
# DATAFILE1のファイルは, objcopy -XXXX $< $@
$(OFILES1): %.o : %.dat
objcopy -XXXX $< $@
# DATAFILE2のファイルは, objcopy -YYYY $< $@
$(OFILES2): %.o : %.dat
objcopy -YYYY $< $@
0152150NGNG
>>151
そんな記述ができるんですね。
すごく勉強になります。

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

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

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

てゆーか,そもそもこの行,そんなに必要な行なんですかねぇ…??
一応,サンプルなぞを真似つつ,取り敢えず付けてあるだけな感じなんですけど。
仮に全く無くしたりすると,具体的にどんな不都合が…?
0167163NGNG
そうか、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 にインクルードさせる。
0168みなNGNG
度々アドバイス有り難う御座います。> >>163(= >>167)さん
いや,>>163 で書いてあった「3)」の,(パイプで)「かます」っていうのが,
Makefile 中のどこにどんな風に記述したらいいのか謎だったんです。

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

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

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

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

う〜ん,まさに一難去ってまた一難。
0173デフォルトの名無しさんNGNG
ifdefの関係でincludeされないようになっているとか。
-DXXXは基本的にコンパイル時と同じように設定しないとダメ。
あと、インクルードパスが通っていないのかも。多分C++の
標準インクルードパス(/usr/include/g++とか)は自分で追加
する必要があると思う。
それでダメなら、根本的に環境がおかしいのかなあ。gccmakedep
が入っているからにはXが入っているんだろうけど、X11R5だったり、
gccがegcsよりさらに昔のだったりしないか?あるいは、gcc向け
でなく、別のコンパイラ向けにソースを書いているのに、gccmakedep
を使おうとしているとか。
0174みなNGNG
>>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/ というパスに在ります。
0175デフォルトの名無しさんNGNG
じゃあ、処理速度は遅くなるけど、gcc/g++ の -M(または-MM)オプションを
使ってみたらどうかな。こいつは依存関係を標準出力に出すので、
リダイレクトしてファイルに落とす。そして、>>167 みたいに
-include でインクルードしてやればよい。Linux ということは gmake を
使ってるわけだよね?
0176デフォルトの名無しさんNGNG
>>174
> やはり後半で御指摘の「根本的に環境がおかしい」んですかねぇ…。(困)
> OS は RedHatLinux 7.1,コンパイラは GNUC 2.96(= GNUC++ 2.96),
> makedepend も gccmakedep も /usr/X11R6/bin/ というパスに在ります。

rpm -qf /usr/X11R6/bin/{makedepend,gccmakedep}
の結果は?
0177みなNGNG
>>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 に成長しないと,宝の持ち腐れですね…。(自嘲
0178176NGNG
>>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}

とか。
0179デフォルトの名無しさんNGNG
http://happysize.com/techie/autodep/
↑こんなんもあるぜ。
漏れはソースを俺様カスタマイズしてつかってるぜ。
0180みなNGNG
>>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 で「周りの人に訊いても――(中略)――サッパリわかんなかったんで」
と書いたのは,そんな訳だったんです。(類は友を呼ぶ…?)
0181みなNGNG
>>179 さん

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

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

やっぱ,いいですか。"autodep"。
後でダウンロードして,ちょっと試してみますね。
情報,有り難う御座います。
0182176NGNG
>>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関連の入門書を嫁。
0183デフォルトの名無しさんNGNG
gcc -MMしろ
0184デフォルトの名無しさんNGNG
0185デフォルトの名無しさんNGNG
0186デフォルトの名無しさんNGNG
下のように、複数のターゲットがある依存関係でコマンドに引数が必要な場合
どう記述したらよいのでしょうか?

$(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
…
0187デフォルトの名無しさんNGNG
>>1
中身はまだ読んでないけど、スレタイ気に入った。w
0188186NGNG
書き忘れましたが、GnuMakeです。
0189デフォルトの名無しさんNGNG
  .,,
   \ヽ--___
    \   丶---ヽ___
     .゙\ ク     ~~>     クソスレに認定されました
      \   ソ   /
       .\     ノ
         \  /
          .\/
           .\
            \
             .\
              ,,\
              .″ ゙》
            __., イ,, 》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
0190デフォルトの名無しさんNGNG
>>186
マルチかよ!
0191デフォルトの名無しさんNGNG
make makes me mad.
0192IP記録実験NGNG
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を提出することがある。
0193デフォルトの名無しさんNGNG
>>598
訴えられても「誣告ですよ」と返せる様にソース固めて叩きゃ良いじゃん。
荒らさなきゃ良いじゃん。
0194デフォルトの名無しさんNGNG
http://qb.2ch.net/test/read.cgi/accuse/1042013605/114-119

/ヽァ/ヽァ
0195デフォルトの名無しさんNGNG
>>373
ありがと
0196デフォルトの名無しさんNGNG
職場、学校、座敷牢から気兼ねなく書き込みでける
ってゆってたのにー
プンスカ!!
0197デフォルトの名無しさんNGNG
最高裁への上告は認められなくなったから、これで事実上判決確定だよ。
逆転も何もないって。          
勢いで上告なんかしても一発で上告却下(門前払い)だよ。
   
二審も一審を支持。これに対して上告しようにも、
刑事訴訟と同様、自由に上告できるってもんでもないのです。
民事訴訟法312条 (上告の理由) 1項
「上告は、判決に憲法の解釈の誤りがあること
その他憲法の違反があることを理由とするときに、することができる。」
http://www.m-net.ne.jp/~doba/goto/hon.htm
  
ようするに上告しても今の制度では100%無駄。 これで完全終了ってことか。
0198デフォルトの名無しさんNGNG
======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
────────────────────────────
0199デフォルトの名無しさんNGNG
>736
らしいね

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

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

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

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

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

何が変わるんですか。
0208デフォルトの名無しさんNGNG
>書き込みの質があがるんでつか
質の低い書きこみが減って、結果的に質の平均があがるのではないかと、、、
0209デフォルトの名無しさんNGNG
>>704

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

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

0212デフォルトの名無しさんNGNG
公人と私人の違いってやつ
俺は嫌いだけどねこの分け方
0213デフォルトの名無しさんNGNG
======2==C==H======================================================

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

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

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

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

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

んじゃ!

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

「見なかった」といわれて終わるのは証明の問題であって実体の問題ではない。
0226デフォルトの名無しさんNGNG
あった
0227山崎渉NGNG
(^^)
0228デフォルトの名無しさんNGNG
ワラタ
0229山崎渉NGNG
(^^)
0230山崎渉NGNG
(^^)
0231デフォルトの名無しさんNGNG
あ、もちろん GNU Make の話ね。
0232デフォルトの名無しさんNGNG
make age
0233デフォルトの名無しさんNGNG
頼むからMakefileにmake love仕込んでソース収めるのやめて。
0234デフォルトの名無しさんNGNG
>>231
どの話?
0235デフォルトの名無しさんNGNG
たくさんサブディレクトリがあるとしてのお話です。

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が起動されるまでわかりません。

なんか解決法はないですか?
0236デフォルトの名無しさんNGNG
>>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)
0237デフォルトの名無しさんNGNG
>>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
0238235NGNG
>>236
あーいっこづつ別のファイルに出せばいいんですね。
そういうやつを一個のファイルに出してみて、「いける?」とか思って、
「あーでもこのファイル更新するタイミングがわからん」とか思ってあきらめてました。
いけそうですね。まだ試せないけど。ありがとーデス。
0239236NGNG
>>235
期待通りの動作になるかもしれませんが、wildcardで
全部アーカイブにするのは作り方としてよくないとおもいます。
(ソースコードを生成するためのプログラムのオブジェクトまで
拾ってしまう可能性がある。)
lib.aにするところまでサブディレクトリのMakefileで記述したほうが
いいとおもいます。

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

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

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

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

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

0246235NGNG
>>244
どうも。
仕事キッチリなお方ですな。
0247デフォルトの名無しさんNGNG
>>236 質問!
> ARC_RULE:=$(DIR_LIST:%=.%.arc_rule)
っていったい何をやっているの?
0248235NGNG
上手くいきましたよ。

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

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

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

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

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

SYSTEM := $(...) # ディストリビューションを見分けるプログラムを呼ぶ。
include Makefile
0266デフォルトの名無しさんNGNG
>>265
> SYSTEM := $(...) # ディストリビューションを見分けるプログラムを呼ぶ。
しまった。$(shell ...)ね。
0267山崎渉NGNG
(^^)
0268山崎渉NGNG
   ∧_∧
  (  ^^ )< ぬるぽ(^^)
0269デフォルトの名無しさんNGNG
GNU make 3.79 使ってます。
make の本(GNU make の本ではありません)に

.SUFFIXES:

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

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


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

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

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

というわけで、
おしえて、えろいひと。
0277デフォルトの名無しさんNGNG
>>276
解決法: コマンドラインの引数を少なくする
……しかないんじゃないの?
0278276NGNG
>>277
すでに動いていた環境でファイル数が増えたからエラーになったのです。
そんなわけで、簡単に引数は少なくできません。

cygwinスレにでも逝ってみます。
0279山崎 渉NGNG

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

 __∧_∧_
 |(  ^^ )| <寝るぽ(^^)
 |\⌒⌒⌒\
 \ |⌒⌒⌒~|         山崎渉
   ~ ̄ ̄ ̄ ̄
0281デフォルトの名無しさんNGNG
最近、Linux、Solarisの開発を始めた者です。
gmakeの質問させてください。

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

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

ところで[]の内側にほんとにスペース入れてないのか?
0284デフォルトの名無しさんNGNG
>>283

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

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

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

0288デフォルトの名無しさんNGNG
clean:
(TAB)rm *.o
(TAB)rm *.a

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

後は、現在時刻と表示された時刻を見比べて、「どの程度」なのかを推測しろ。
できるよな? な?
0300300NGNG
この偉大なスレの300が数日間も放置されていようとはな。
0301デフォルトの名無しさんNGNG
出来れば300日間放置してほしかった
0302デフォルトの名無しさんNGNG
すみません。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つ変化する部分があると
どう書いたらいいものか...
0303デフォルトの名無しさんNGNG
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))))

と書けるみたい。(全角スペースはタブね)
0304デフォルトの名無しさんNGNG
makeの次がantとはね・・・
この中間にある書きやすくて読みやすくて高機能なビルド支援ツールってないのかね。
0305302NGNG
>>303
おお、ありがと。
しかし、自分用の makefile ならいいけど、配布用だとまだ使うのは早いかな...
0306303NGNG
>>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)

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

# $(MAKEFILE) は自分で値を設定しておかないといけないみたいですね。
0308デフォルトの名無しさんNGNG
ant
0309デフォルトの名無しさんNGNG
giant-ant
0310デフォルトの名無しさんNGNG
ム板の板歌

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

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

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

>>311
> FILE_3 = *.tmp
これも GNU Make だと
FILE_3 := $(wildcard *.tmp)
かな? キモは ":=" を使って、その場で展開しておくこと。
0341デフォルトの名無しさんNGNG
>>340
> キモは ":=" を使って、その場で展開しておくこと。

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

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

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

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

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

ある程度manで調べたりしたけど、本当・・・難しい。
まともな日本語の本ってないんですかね?1にも書いてありますが。
0362デフォルトの名無しさんNGNG
>>360
言語もわからんのに答えられるわけねーだろボケ!
0363358NGNG
>>362
言語?あ・・・。

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

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

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

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

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

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

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

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

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

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

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

Makefileの中に引数で条件分岐できるif文書きたいんだけど
どうしたらいいでしか?
0395デフォルトの名無しさんNGNG
Make makes make making many problems.
0396デフォルトの名無しさんNGNG
make make make!
0397デフォルトの名無しさんNGNG
>>394
http://www.ecoop.net/coop/translated/GNUMake3.77/make_7.jp.html#SEC70
0398デフォルトの名無しさんNGNG
そんなまともな日本語のドキュメントがあったのか。
0399デフォルトの名無しさんNGNG
再帰的makeする時、上の階層のMakefileで定義した変数
を下位階層のMakefileに継承させたいのですが、どうすればよいでしょうか。
0400デフォルトの名無しさんNGNG
>>399 ttp://www.gnu.org/software/make/manual/html_chapter/make_5.html#SEC60
0401デフォルトの名無しさんNGNG
POSIX標準のmakeってどうして作れないの?
shみたいになんとかしてほしいよ。automakeはよく分らんし。
0402デフォルトの名無しさんNGNG
gnu makeでいいじゃん。
自分のreadmeには必須と書いてあるよw
0403デフォルトの名無しさんNGNG
perlみたいに商用UNIXにも標準搭載してくれりゃ構わんけどな。
0404デフォルトの名無しさんNGNG
automake,autoconf使えばいいじゃん。あれこそ最高のハックだよ。
UNIXプログラマ必須のツールだと思うけどね。だからNetBSDみたいに、
GNUツールの全てのMakefileを自前のmake用に新規に書くのは嫌い。
もちろんビルド時間の節約にかなり貢献してるのは認めるけど。。。。

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

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

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

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

実際に使ってる人の意見も聞いてみたいです。
0412デフォルトの名無しさんNGNG
http://www.microsoft.com/japan/msdn/library/default.asp?url=/japan/msdn/library/ja/vccore/html/_asug_batch.2d.mode_rules.asp
GNU make で上のようなことはできませんか?
0413デフォルトの名無しさんNGNG
うちの会社の人バッチファイルで全部コンパイルしてるよ。
だから一部だけ修正しても全モジュールリビルドしてリリースしてる。
0414デフォルトの名無しさんNGNG
一行変えたら全部コンパイルやり直しなんてやってられないな...
0415デフォルトの名無しさんNGNG
自分はmake使ってるけどC++のヘッダにコード書きまくるんで結構遅い・・・
0416デフォルトの名無しさんNGNG
>>415
いったい何を書いてるの?

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

何年も待って、やっとキター。と思ったら、3.4 はびみょーな出来栄えだったのな。
0420デフォルトの名無しさんNGNG
プリコンパイル済みヘッダて変な日本語だよな
0421デフォルトの名無しさんNGNG
別に
0422デフォルトの名無しさんNGNG
頭痛が痛いみたいな
0423デフォルトの名無しさんNGNG
precompil"ed" headerなんだから、特に変だとは思わないけど。
0424デフォルトの名無しさんNGNG
むしろ「済み」だけ日本語にするバランス感覚が受け入れ難い。
0425デフォルトの名無しさんNGNG
プリコンパイル済み
は
事前にコンパイルが済んでいる
だろ。どこがおかしいのやら。
0426デフォルトの名無しさんNGNG
>>425
それなら「事前コンパイル済みヘッダ」になるだろ。
なぜ「プリコンパイルドヘッダ」ではないのだろうか?
どうやらMSの翻訳が元のようだが。
0427デフォルトの名無しさんNGNG
>>426
普通カタカナに直す時に「ド」なんて書かない。あなた日本人?
0428デフォルトの名無しさんNGNG
へぇ(嘲笑)
0429デフォルトの名無しさんNGNG
なら、プリコンパイルヘッダでいいじゃん。済みなんて入れる必要もない。
0430デフォルトの名無しさんNGNG
↑論点ずれてる
0431デフォルトの名無しさんNGNG
いまさらMS翻訳にケチつけるなよ。
いったいなにがしたいんだ。
0432デフォルトの名無しさんNGNG
>>427
> 普通カタカナに直す時に「ド」なんて書かない。
よくあるがこれは変な習慣だよなあ。そもそも、なんで抜くのかが疑問だ。コレMSが始めたのか?
0433デフォルトの名無しさんNGNG
>>427
メモリマップドI/Oとか言うじゃん
0434M.B.NGNG
全部読んだが make を自分で書いたアフォは漏れだけだった…… orz
0435デフォルトの名無しさんNGNG
>>433
それは「ド」ではなく「ト」では?
0436デフォルトの名無しさんNGNG
>434
(;´Д`)
漏れも、なんか make をうまく使いこなせなくて
癇癪起こしちゃって自分で書こうとした事があるよ……
0437M.B.NGNG
Java のプログラムを Win 上で開発しているのだが、
昔アスキーで出してたような、.exe 形式の make が見当たんなくてさ、
GNU make のソースを Cygwin 上でコンパイルして
.exe 形式にすりゃあいいと思ったんだが結局ソースが見つからず、
ええい面倒臭え、と思って Java で書いた。
非常にチャチなものだが便利に使ってる。
0438デフォルトの名無しさんNGNG
>>437
GNU make のソースが見つからないって、アフォか。
0439デフォルトの名無しさんNGNG
てか、cygwinにGNU makeのバイナリがあるだろが。
0440デフォルトの名無しさんNGNG
javaならant使えよ・・・
0441デフォルトの名無しさんNGNG
ぶかあああああああああああああああああああああああああああああああああ
0442デフォルトの名無しさんNGNG
ワロタ
0443M.B.NGNG
ぶかー。
0444デフォルトの名無しさんNGNG
makefile書くまでもないような処理をバッチファイルで
ftimecomp source target && ( sourceからtargetを作る処理 )
とかはたまにやるけど。ftimecompは自作ツール。
0445M.B.NGNG
自作せんとね、使い方忘れるのよ。
いらんものいろいろ作ったなぁ。
0446デフォルトの名無しさんNGNG
その自作ツールの使い方を忘れるんで、
Makefileに書いておくんだけどな、おれ
0447M.B.NGNG
漏れも自分ちの電話番号とか忘れるんで紙に書いてしまっとくんだが、
どこにしまったか忘れる。
0448デフォルトの名無しさんNGNG
>>447 無駄話でageんな
0449M.B.NGNG
ここでも言われた _| ̄|○
0450デフォルトの名無しさんNGNG
2重コロンの意味がわかんね
よく単一ターゲットに使われるみたいだけど
どういう意味なの?
0451デフォルトの名無しさんNGNG
>>450

マニュアル読め
http://www.ecoop.net/coop/translated/GNUMake3.77/make_4.jp.html#SEC41
0452デフォルトの名無しさんNGNG
よんだけどわかんなかったんだよぅOTL
0453デフォルトの名無しさんNGNG
>>452
カードキャぷたーさくらってマジ面白いよな。
0454デフォルトの名無しさんNGNG
>>452
> よんだけどわかんなかったんだよぅOTL

同志よ、俺もわからん。
でも、普通に依存関係書いている分には必要ないような気がする。
0455デフォルトの名無しさんNGNG
>>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」が更新される。
両方更新されると、両方表示される。
コロンをひとつにすると、同じターゲットに対するコマンドが二つあると警告が出て、両方更新された場合にも一方のコマンドしか実行されなくなる。
マニュアルにある通り、どのソースが変更されたかによって実行するコマンドを切り替えるための方法だと思う。
0456make に代わる次世代標準NGNG
make ってそろそろ引退してほしい。
make に代わる次世代標準はありませんか?
ちなみに Ant は処理系が Java で書かれているし XML 記法だからやだ。
0457デフォルトの名無しさんNGNG
make が sh と結びついている時点で最悪なんだよ。
perl か python と結びついてほしい。
たいていの UNIX には perl や python は入っているだろうし。
0458デフォルトの名無しさんNGNG
>Ant は処理系が Java で書かれているし
インスコすれば、そんなことは誰もわからない。
0459デフォルトの名無しさんNGNG
>>456
MSBuild使え
0460デフォルトの名無しさんNGNG
>>457
個人的にはAWKと(ry
0461デフォルトの名無しさんNGNG
>>456
次世代標準なんかじゃないけど、jamとかどうですか?
ttp://www.freetype.org/jam/index.html
0462デフォルトの名無しさんNGNG
>>457
SHELL変数をうまく使え
0463デフォルトの名無しさんNGNG
0464デフォルトの名無しさんNGNG
MinGWのmakeで処理していますが、

a.hpp : b.hpp

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

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

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

こういう場合は、

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

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

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

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

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

みたいなふうにしたんですが、この=が原因でこの文がマクロ変数に
代入してる式みたいなふうに認識されてしまい升。nmake.exeです。
どうすればいいんでしょうか。
0475デフォルトの名無しさんNGNG
make makes make make many problems.
0476デフォルトの名無しさんNGNG
cmake使ってる人いる?
0477デフォルトの名無しさん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とひっかかってしまい、うまくコピーができません。
どなたかご教示いただけないでしょうか?
0478デフォルトの名無しさん05/03/02 02:20:46
>>477
> srcpackage: files.txt
> srcpackage: DSTFILES=$(subst ../,package/src,$(shell cat files.txt))
> srcpackage: $(DSTFILES);

これの意味を自分で(日本語で)説明できるか?
できないなら、マニュアル見直せ。
ほかにも問題がありそうだが、まずはそこから。
047947705/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:
  コピー処理
としてみました。
0480デフォルトの名無しさん05/03/02 20:34:06
>>479
srcpackage: file.txt
を「srcpackageを作るためにはfile.txtが必要」と読め。
0481デフォルトの名無しさん05/03/03 00:44:11
>>479
やっぱりマニュアル読んで出直せ。

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

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

> srcpackage: $(DSTFILES);

これは
srcpackage:
 $(DSTFILES)
と同じ意味。
srcpackage を $(DSTFILES) に依存させるのであれば最後のセミコロンを削除しろ。
0482デフォルトの名無しさん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)

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

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

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

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

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

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

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

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

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


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

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

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

の間違いです。
何度もすいません。
0495デフォルトの名無しさん2005/06/12(日) 12:02:03
>>492-494 http://www.gnu.org/software/make/manual/html_node/make_29.html
04964922005/06/12(日) 14:51:16
レスありがとうございました。

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

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

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

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

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



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

cd hoge; だと、その行のコマンドしか駄目ですし。
移るディレクトリにまた、Makefile作っておいて、
さらにmake呼ぶのがmake流なんでしょうか
0503デフォルトの名無しさん2005/07/21(木) 13:57:08
ageます
0504デフォルトの名無しさん2005/07/21(木) 19:17:41
>>502
>移るディレクトリにまた、Makefile作っておいて、
>さらにmake呼ぶのがmake流なんでしょうか
automakeでmakeファイル作るときは
そんな風にするのが一般的だと思う
「make流か」と言われれば
?
0505デフォルトの名無しさん2005/07/21(木) 20:17:33
ん?cdで移動しても問題ないだろ
0506デフォルトの名無しさん2005/07/22(金) 00:51:40
>>502
 cd hoge; \
 do_something; \
 do_anotherthing
0507デフォルトの名無しさん2005/08/14(日) 18:17:10
mingwのmake.exeについて質問です。

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

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

または include に半角スペースを含むファイルパスを渡す方法が無いでしょうか?
ちなみに "" で囲ってみたんですがダメでした。
0508デフォルトの名無しさん2005/08/15(月) 13:21:52
半角スペースを含むパスを使わない。
0509デフォルトの名無しさん2005/08/15(月) 15:16:58
超ダサっ!
0510デフォルトの名無しさん2005/08/15(月) 17:30:57
INCLUDE=-I"path 1" -I"path 2"
ふつうにできるょ?
05115072005/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
0512デフォルトの名無しさん2005/08/18(木) 00:47:12
>>511
> 今から僕のコンパイル作業ディレクトリを変えるのはちょっと・・・
includeされる側のディレクトリとは関係ないんじゃないの?
相対パスで指定するとかsymlink張ってみるとか、なんか工夫してみ。
0513デフォルトの名無しさん2005/08/18(木) 04:49:48
>>507
mingwのmakeってcygwin使わないんだっけ?
cygwinのmakeならこんなんで逃げれるけど。
-include $(shell cygpath -m $$(cygpath -d $(VALUE)))
05145072005/08/18(木) 23:29:14
www.ecoop.net死んじゃったか(´∀`;)
makeの解説よかったのに…勿体無い。

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

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


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

>>518
まじっすか

>>519
シンボリックリンクに慣れるとねぇ。あれは便利すぎ。
でも、NTFSにもシンボリックリンクは実装してないだけで、
データ構造の中には予約としてあるっぽいよ
05215072005/08/21(日) 01:40:59
やば。age設定になってた。ゴメス(^ω^;)
0522デフォルトの名無しさん2005/08/23(火) 12:19:05
>>520
だからね、ディレクトリに関してはジャンクションはディフォルトで使えるんですよ。
ファイルに対するジャンクションが意図的に禁止してあるだけで。
生半可な知識で語るくらいなら>518に書かれているツールの作者のページを読んできな。
0523デフォルトの名無しさん2005/08/23(火) 13:28:11
絶対パスで格納するうんこ仕様
0524デフォルトの名無しさん2005/08/28(日) 19:09:51
makeでsrcディレクトリのソースを
binディレクトリに展開するにはどうしたらよいですか?
0525デフォルトの名無しさん2005/08/28(日) 19:19:06
間違えた
srcディレクトリのソースをコンパイルして
生成物をbinディレクトリに展開したいんです
0526デフォルトの名無しさん2005/08/28(日) 20:53:45
展開ってどういう意味?
0527デフォルトの名無しさん2005/08/28(日) 21:02:30
配置って意味でそ
0528デフォルトの名無しさん2005/08/28(日) 21:15:23
コピーしたいだけなら、普通に copy とか、cp とかすりゃいいんじゃねーの?
0529デフォルトの名無しさん2005/08/28(日) 21:37:51
>>524

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

1つめのプログラムをmakeのち実行した後に、2つめのプログラムをmakeのち実行をしたいのですが。
ちなみにcを使っています。
0532デフォルトの名無しさん2005/10/24(月) 15:09:47
ageさせていただきます。
0533デフォルトの名無しさん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です。宜しくお願いします。

0534デフォルトの名無しさん2005/10/24(月) 23:25:09
>>531
make -f 使えばいいんじゃないの?
0535デフォルトの名無しさん2005/10/24(月) 23:26:55
>>533
$(notdir ...)
0536ミャケでございます2005/10/25(火) 10:39:38
>>535
ありがとうございます。うまくいきました。
0537デフォルトの名無しさん2005/11/04(金) 08:43:29
$(CC) $(CFLAGS) -o $@ $<
を
$(CC) $(CFLAGS) -o $< $<
って書き間違えた……

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

svnで管理してたから古い状態で復活できたけど、
10個近く新しいファイルを作ってた。
復活できたファイルも変更点がかなりあった……
0538デフォルトの名無しさん2005/11/04(金) 10:30:57
>>537
デフォルトの規則をそのまま使えばいいのに…
0539デフォルトの名無しさん2005/11/04(金) 11:30:34
>>538
VPath使ってたら明示せざるを得なくなった
+
コンパイラの切り替えとか含めててディフォルトルールじゃ対応しきれなくなってた
0540デフォルトの名無しさん2005/11/12(土) 21:10:42
下記のような makefile で make X.a を実行した場合に,x.b y.b z.b が表示
されて欲しいのですが,表示されません.

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

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

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

CC = gcc
TARGET := $(patsubst %.c,%,$(wildcard *.c))
all : $(TARGET)
% : %.c
$(CC) -o $* $<
0545デフォルトの名無しさん2005/11/29(火) 21:47:33
追加。。。

環境はFedora Core 4、gcc 4.0.1、GNU Make 3.80でCのプログラムです。
0546デフォルトの名無しさん2005/12/27(火) 13:12:32
オライリーからmake3版でたお
0547デフォルトの名無しさん2005/12/27(火) 19:22:30
この間、第2版買ったばかりの俺に対するイジメだな。
0548デフォルトの名無しさん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ターゲット内の記述でうまく期待した出力をさせるようにできないでしょうか?
0549デフォルトの名無しさん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 しなくても、
コンパイルが成功するたびに最新の依存関係に更新されて便利。
05505482005/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;
の部分で、出力結果に改行が入ってしまいます。
この改行を入れない方法はないでしょうか?
0551デフォルトの名無しさん2005/12/29(木) 21:50:13
VPATH
05525492005/12/30(金) 00:17:51
>>550
一番最初は .o ファイルが存在しないから、
ヘッダの依存関係に関係なくコンパイルが必要なことがわかる。
05535482005/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))

これで……解決?
0554デフォルトの名無しさん2006/03/01(水) 23:24:01
別ディレクトリにあるファイルを関連付けする方法ってないですか?
例えば、ソースがカレントディレクトリ、出力が一つ下のディレクトリだと、

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

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

.hoge.mage:
 @echo $@ $<

では上手くいきません・・・
.hoge../.mageみたいに関連付けられないのかなあ
0555デフォルトの名無しさん2006/03/01(水) 23:28:01
ちなみに、いまは、現在のディレクトリに出力して、下のディレクトリにコピーしてます。
0556デフォルトの名無しさん2006/03/02(木) 00:05:11
>>554
パターンルール使え。 % 入ってるやつ。

DEST の定義で .js ってなってるのは書き込み時の間違いか?
あと ../ は一つ上のディレクトリだと思う。
0557デフォルトの名無しさん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 ってなってるのは書き込み時の間違いか?
書き換えミスです。

>あと ../ は一つ上のディレクトリだと思う。
ああ、そっか、下でなくて、上ですね。
0558デフォルトの名無しさん2006/03/18(土) 08:08:37
gnu makeでローカルなサッフィクスルールを作りたいのですが、
事情があって生成ファイルにhoge.foo.etcのように複数のピリオドを持たせています。
適切なやり方がありましたら教えてください。
0559デフォルトの名無しさん2006/03/18(土) 18:31:43
>>558
パターンルール使え。 % 入ってるやつ。
0560デフォルトの名無しさん2006/03/20(月) 17:23:30
Visual C++とC++Builderのmakeを両方とも使いたいのですが、どうやったらうまく切り替えられるでしょうか?
0561デフォルトの名無しさん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.
0562デフォルトの名無しさん2006/03/21(火) 02:51:13
>>560
なにに困ってるのかサッパリわからん。
普通に使い分けられるだろ?
0563デフォルトの名無しさん2006/03/21(火) 15:51:15
>>560
ん?VisualC++て、nmakeだから、Borlandのmakeとはコマンド違うくない?
0564デフォルトの名無しさん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を作ってコンパイルしたもので、できあがったファイルのサイズが違うのですが
なぜなのでしょうか?
0565デフォルトの名無しさん2006/03/24(金) 07:50:49
コンパイルオプションが違うからwww
0566デフォルトの名無しさん2006/03/24(金) 14:19:56
>>564
お前のその -O3 は一体何なんだと。
0567デフォルトの名無しさん2006/03/24(金) 16:57:22
おっさん
0568デフォルトの名無しさん2006/03/24(金) 18:32:38
90°傾いたウサギ風船
0569デフォルトの名無しさん2006/03/26(日) 02:16:20
1つのMakefile で複数の exe に対応することってきますか?
1 cpp -> 1 exe で。
現状ほぼ同じ Makefile をコピーして指定したソースファイルの名前を編集してやっているのですが、
非常にめんどくさいです。

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

%.x:
 echo $@ $<

に続けて

a.x: a.abc

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

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

。・゚・(ノД`)・゚・。
0635デフォルトの名無しさん2006/09/17(日) 16:43:39
emacsでMakefile中でもCtr-C,Cを押したらコンパイルする技を
昔ネットで見たのですが忘れてしまいました。
どなたか教えてくれませんか?
0636デフォルトの名無しさん2006/09/17(日) 16:52:16
>>635
(add-hook
'makefile-mode-hook
'(lambda ()
(local-set-key "\C-cc" 'compile)
))
0637デフォルトの名無しさん2006/09/17(日) 17:05:23
>>631

そういうフィルタを書くというのは、よくやるなぁ。
ついでに注意すべき warning なんかを強調してみたりとか。
0638デフォルトの名無しさん2006/09/29(金) 00:41:47
>>630
rakeの日本語の資料はどこを見ればいいのかな?
機能をmakeと対比してあるとありがたい。特に再帰処理関係で。
0639k ◆WFGp1NZuiw 2006/09/30(土) 22:40:57
>>638
http://www.dodgson.org/omo/t/?date=20060901
0640デフォルトの名無しさん2006/10/04(水) 23:08:34
>>636
ありがとう。これでコンパイルが大分楽になる。
lispわかんないと一流のプログラマーにはなれないな。
がんばるよ。
0641デフォルトの名無しさん2006/10/20(金) 21:26:55
lispの出来損ないみたい>>makeの文法
0642デフォルトの名無しさん2006/10/21(土) 06:04:16
lisp厨乙
0643デフォルトの名無しさん2006/10/27(金) 12:04:18
一応確認、まぁ誤植だと思うけど

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

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

数学しなくなってだいぶたつし、原文読んでないけど、
これって「最小公倍数」じゃなくて「最大公約数」だよな?
0644デフォルトの名無しさん2006/10/27(金) 15:17:43
>>643
原文見てないけど、「最小公分母」の誤訳でしょ。
0645デフォルトの名無しさん2006/10/29(日) 19:04:49
nmakeってsubstとかpatsubstに相当するものないの?
0646デフォルトの名無しさん2006/12/02(土) 23:58:48
暗黙のルールで
hoge.cc -> hoge.o -> hoge
の順番に作りたい時、
hoge.o -> hoge
のときにg++じゃなくてccになっちゃうんだけど、
これってCC=g++にしておくしかない?
0647デフォルトの名無しさん2006/12/03(日) 10:32:31
>>646 何が不満だ?
06486462006/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
で全く同じものになるのかが分からなかったので。
0649デフォルトの名無しさん2006/12/04(月) 10:29:19
man gccしてみろ。
0650デフォルトの名無しさん2006/12/05(火) 14:55:28
>>648
ccでリンクできてるなら、それでまったく問題ない。
g++のときは暗黙に -lstdc++ がつくだけ。
0651デフォルトの名無しさん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しようとしやがりました。
そうじゃなく個別にやりたいです。
0652デフォルトの名無しさん2007/01/05(金) 01:32:28
それは make でなくシェルスクリプトの話かと。
for i in *.cpp; do grep COMMENT $i > `echo $i|sed -e 's/\.cpp/.log/'`;done
とか。
0653デフォルトの名無しさん2007/01/05(金) 10:41:05
拡張子がcppとlogに決まっているなら、サフィックス・ルールを使用する方法もある。
http://www.ecoop.net/coop/translated/GNUMake3.77/make_10.jp.html#SEC102
0654デフォルトの名無しさん2007/02/13(火) 22:23:13
rakeってC++をmakeできますか?
0655デフォルトの名無しさん2007/02/14(水) 19:27:32
          ___/ 冫   ∧_∧
 ∧_∧  _ __ (_    /   (´∀` )
 ( ´∀`)/ ) )  |   |    //   \
 (  ⊃/ //  ∧_∧    (__(_/`  |
  \__//    ( ´∀`)       _///
       ̄     ∪ ̄∪      (__(__)
0656デフォルトの名無しさん2007/02/15(木) 03:19:04
>>654
makeの意味わかってる?

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

0661デフォルトの名無しさん2007/02/18(日) 13:27:03
rakeとantくらいしかとっさには思い出せないな……
0662autoXXの癌は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は開発者のためのツールではないと認識することが大切です。
0663デフォルトの名無しさん2007/03/20(火) 05:00:53
仕事でjam使ってます。サッパリわかりません
0664デフォルトの名無しさん2007/04/24(火) 17:30:42
Rake
http://www2s.biglobe.ne.jp/~idesaku/sss/tech/rake/index.html

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

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

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

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

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

pはperlだろうが lispつながり(?)でprologを連想。
ホーン節って依存関係定義そのものだな。
0671デフォルトの名無しさん2007/04/24(火) 22:31:43
dake
0672デフォルトの名無しさん2007/04/24(火) 23:47:56
やっぱ俺Makefileでいいや・・・
0673デフォルトの名無しさん2007/04/25(水) 01:23:22
delake
VBake
make#
0674デフォルトの名無しさん2007/04/25(水) 01:37:29
>>634
つ♥
0675デフォルトの名無しさん2007/04/25(水) 15:04:25
rakeで依存関係をgccに解決させたりしてるときにどう持ってくればいいんだ?
0676デフォルトの名無しさん2007/04/25(水) 21:31:46
>>675
makedependってこと?
0677デフォルトの名無しさん2007/04/25(水) 21:40:32
require 'rake/loader/makefile'

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

import '.depend.mf'

だろうか。
0678デフォルトの名無しさん2007/04/25(水) 23:22:53
>>664も参照
0679デフォルトの名無しさん2007/04/26(木) 10:50:56
>>676-678
importで導入できるんだね、ありがと
0680奉祝スレ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
>
0681デフォルトの名無しさん2007/08/17(金) 22:00:45
普通に info に載ってるけど。
man にも簡単な説明が出てる。
0682デフォルトの名無しさん2007/08/23(木) 02:41:13
このスレ見ててもグチばっかだし、ほんとにmakeって使えないと思う。
(autotools含めてバッドノウハウの塊だと思う)

何故代替品は出てこないんだろう?
オープンソース界隈で普及しすぎて、デファクトになっちゃったのが原因なのかね。
マイクロソフトの独占なんかより、makeの独占を禁止してほしい。
0683デフォルトの名無しさん2007/08/23(木) 02:45:27
>>682
ant, bjam, rake, SCons とかは代替品とは言わんの?
0684デフォルトの名無しさん2007/08/23(木) 05:44:05
autotoolはともかくmakeは無いと困るだろ。
0685デフォルトの名無しさん2007/08/23(木) 22:06:01
>>682
makeも使えない奴はたいしたコードはかけないし、
make使える奴は代替の必要を感じない

そういう意味でsubversion開発者は実に偉大だ
0686デフォルトの名無しさん2007/08/26(日) 22:45:52
>>682
rakeつかってる
0687デフォルトの名無しさん2007/09/05(水) 19:03:57
Rakeのユーザーガイド見つけた

RakeUserGuide - Rake ユーザガイド
http://www.kyobashi.org/hf/RakeUserGuide/?AboutRakeUserGuide
    ___
   ,;f     ヽ
  i:         i
  |         |
  |        |  ///;ト,
  |    ^  ^ ) ////゙l゙l;   ありがたや〜
  (.  >ノ(、_, )ヽ、} l   .i .! |   ありがたや〜
  ,,∧ヽ !-=ニ=- | │   | .|
/\..\\`ニニ´ !, {   .ノ.ノ
/  \ \ ̄ ̄ ̄../   / .|
0688デフォルトの名無しさん2007/10/03(水) 18:54:33
makeが成功した後に自動的にcleanを実行するようにすることはできませんか?
0689デフォルトの名無しさん2007/10/03(水) 19:00:26
make allの最後に、make clean呼ぶようにするだけでは?
0690デフォルトの名無しさん2007/10/03(水) 19:48:03
>>689
作った物消すのって何したいん?、コンパイルチェックだけ?
0691デフォルトの名無しさん2007/10/03(水) 20:25:19
ただ、FreeBSDのportsシステムのmakeファイルにはうんざり
0692デフォルトの名無しさん2007/10/16(火) 09:10:29
WindowsでMakefileをダブルクリックで開けるようにはできないでしょうか?
0693デフォルトの名無しさん2007/10/16(火) 10:52:08
>>692
できるよ
ただし他の拡張子のついてないファイルもダブルクリックでmakeされちゃうけど
0694デフォルトの名無しさん2007/10/27(土) 01:05:58
>>692
>>693の問題があるので、俺は、適当に、batファイル書いて、クリックしてるけど


cygwinコンソール開くの面倒な時も多々あるw
0695デフォルトの名無しさん2007/10/27(土) 19:15:09
Makefile.mak にすりゃいいんだ
0696デフォルトの名無しさん2007/12/09(日) 23:42:59
>>688
make all clean
0697デフォルトの名無しさん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 : 」のように書きたいのですが、
元と後が同じだとうまくいきません。


どうかよろしくお願いします。
0698デフォルトの名無しさん2007/12/24(月) 15:48:00
>>697
それ循環定義になるならムリだと思う。
ただ現実的な解決方法としては
jpeg と jpg にしてしまうとか。
もしくは 一旦別の拡張子のファイルを touch して
jpg -> jpg コンバートかますとかならやれそう
0699デフォルトの名無しさん2007/12/24(月) 15:51:55
>>697
THUMBNAIL/%.JPG : IMG/%.JPG
  convert -geometry 150x150 $< $@
07006972007/12/24(月) 15:56:38
>>698
ありがとうございます。

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

>jpeg と jpg にしてしまうとか。
これがいいですかね
0701デフォルトの名無しさん2007/12/24(月) 15:58:03
>>697
全然サフィックスルールじゃないけど
SRCJPG = ${shell ls IMG/*.JPG}
${SRCJPG}: TUMBNAIL/%.JPG: IMG/%.JPG:
  convert -geometry 150x150 $< $@
という感じじゃダメかな。
(Windowsならlsをdirとかに変えて)
07026972007/12/24(月) 16:14:05
>699,701
これだ!ありがとうございます!
うまくいきました
0703デフォルトの名無しさん2007/12/30(日) 12:19:08
makeで普通.cppを修正するとそこだけコンパイルしてくれますよね?
.hを修正してもコンパイルしてくれないのですが、どうしたらいいですか?
誰か教えて
0704デフォルトの名無しさん2007/12/30(日) 12:22:59
依存関係が足りないから。

$ g++ -MM
で出てくる依存関係をMakefileで読み込むようにしとけ
0705デフォルトの名無しさん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
というルールを記述することは避けたいです.
0706デフォルトの名無しさん2007/12/31(月) 15:47:10
age
0707デフォルトの名無しさん2007/12/31(月) 16:53:06
阪大外国語学部の椿原慎二くんは昔からゴム付けてくれませんよ。
なんか顔もゴリラなんだけど、あのときはまさに野獣になって、日本語もさえも通じなくなる。
まがりにも外国語学部イタリア専攻で行ってるんだけど、あれじゃ外国語とか言うよりもゴリラ語。
きっとボブサップもあんな感じなんだろうな。ただ椿原慎二のチンコはサップに比べると小さいし臭いけどね。

0708デフォルトの名無しさん2007/12/31(月) 22:50:40
こ こ で も 椿 ○ 粘 着 か
年の瀬だっちゅうのに悲しくないのかね
0709デフォルトの名無しさん2008/01/08(火) 20:41:34
UNIX Cシェルのmakefileで、
外部の環境変数が設定してあるファイルを
makefileの中から読み込むことって出来ますか?
出来るなら方法を教えてください。
0710デフォルトの名無しさん2008/01/10(木) 12:43:51
include

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

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

0717デフォルトの名無しさん2008/02/13(水) 15:12:44
nmakeが常に、すべてのソースをコンパイルしようとします。
最新のものはコンパイルしないようにするにはどのようにしたらよいのでありましょうか?
0718デフォルトの名無しさん2008/02/13(水) 19:24:18
Makefileを確認したら?
0719デフォルトの名無しさん2008/02/13(水) 21:48:25
>>717
依存関係の書きかたを間違えてるんじゃないの?
0720デフォルトの名無しさん2008/02/19(火) 08:37:35
OSによって、gccとclを使い分けたいのですが、LinuxとWindowsによってコンパイラを変えるにはどのようにしたらよいのでしょうか?
0721デフォルトの名無しさん2008/02/19(火) 09:48:35
>>720
C++ sourceで書けばいいんじゃね?
07227202008/02/19(火) 10:18:42
もう少し詳しく教えていただけないでしょうか?
ifの様な構文を使って
CC=cl
と
CC=g++
を切り替えたいのですが
0723デフォルトの名無しさん2008/02/19(火) 10:41:37
>>720,722
どのmakeをお使いですか?
GNU make、BSD make、nmake、それぞれやり方が違うと思われ。
07247202008/02/19(火) 11:14:26
GNU makeとnmakeです。
0725デフォルトの名無しさん2008/02/19(火) 11:27:07
つか、nmakeとGNU makeって全然違うようなキガス
0726デフォルトの名無しさん2008/02/19(火) 11:41:48
そうなのですが、それに対して、同じMakefileを使えるようにする方法はないものかと思案しています
0727デフォルトの名無しさん2008/02/19(火) 11:43:08
なにか方向を間違っているような気がします.
0728デフォルトの名無しさん2008/02/19(火) 11:45:00
>>724
共通のMakefileではムリじゃないかなあ。
条件分岐はGNU makeだとifeq/ifdef、nmakeだと!IF/!IFDEFだし。

ふつうは、プラットフォーム毎にMakefileを用意したり生成したりする
のではないかと。
0729デフォルトの名無しさん2008/02/19(火) 13:09:40
>>724
makefileスレに行け。
http://pc11.2ch.net/test/read.cgi/tech/1029599472/
0730デフォルトの名無しさん2008/02/19(火) 13:30:10
これは・・・・いったい・・
0731デフォルトの名無しさん2008/02/19(火) 13:33:17
1.気の利いた洒落のつもり
2.くだ質スレだと勘違いした
3.じつは人類滅亡の予言
0732デフォルトの名無しさん2008/02/19(火) 13:38:57
         ヘ   ,ヘ
        / ヽ,  ::.
       /      ::.
       /       :::.  
      ″<●> <●>::.  
      |  、_,、_,   ::::.
     |     !.ノ  :::::::::
     /          ..::::.
    /           :::::
07337292008/02/19(火) 13:47:30
正解は2番……_/ ̄|◯
0734デフォルトの名無しさん2008/02/19(火) 16:50:40
普通は
makefile.vc
makefile.gcc
makefile.cygwin
makefile.tcc
makefile.pl
makefile.rb
makefile.cobol
のように分けますね
0735デフォルトの名無しさん2008/02/19(火) 18:36:18
jオプションで並列コンパイルをしています。
これを毎回指定しないでも並列コンパイルする方法はないでしょうか?
OSはFedora8、コンパイラーはintel10です。
0736デフォルトの名無しさん2008/02/19(火) 18:40:30
なぜその方法を知りたいのかが知りたいなぁ。
0737デフォルトの名無しさん2008/02/19(火) 18:50:15
alias make='make -j'
0738デフォルトの名無しさん2008/02/19(火) 19:03:08
あなたは奇妙な感覚に包まれた -more-
0739デフォルトの名無しさん2008/02/19(火) 19:19:30
>>735
GNU make自身には-jのデフォルト値を変える手段はないですね。
737みたいにエイリアスにするか、シェルスクリプトにするか。
0740デフォルトの名無しさん2008/02/19(火) 19:29:22
cmakeとsconsのが綺麗でよいよな。
linuxカーネルとかbbみたいなオプション出てこないのもよい。
見た目だけでしか判断できないので。
0741デフォルトの名無しさん2008/02/26(火) 23:51:30
#ifdef AAA
(コード)
#endif

みたいなのがソース中に書いてあって、これをmake時に、define したいのですが、
$ make CFLAGS="-DAAA" とすると、もとのMakefileで指定されていたCFLAGSが
上書きされてしまいます。CFLAGS+="-DAAA" のように追加指定で make 時の
コマンドライン上で指定って出来ないのでしょうか?
0742デフォルトの名無しさん2008/02/27(水) 15:41:38
CFLAGSはユーザーが定義するものだから、Makefile側ではそのまま使わない。
$(CC) $(CFLAGS) $(MYCFLAGS) -o (ry
0743デフォルトの名無しさん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 ...) は、まあ、動かないのですが、
何かうまく動かす方法はないでしょうか?
0744デフォルトの名無しさん2008/03/22(土) 19:37:47
filter-out あたりをつかって別に分けるかなぁ。
0745デフォルトの名無しさん2008/03/22(土) 21:57:27
要は

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

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

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

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

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

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

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

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

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

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

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

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

これってどうにかしてうまくやる方法あるかなあ?
0759デフォルトの名無しさん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
0760デフォルトの名無しさん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

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


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

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

test:
[tab]false; true

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

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

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

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

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

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

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

必ず付けたいのがあるなら、 override CFLAGS+=... で付けられそう。
0771デフォルトの名無しさん2008/06/21(土) 16:47:56
:= ならどうよ
0772デフォルトの名無しさん2008/06/21(土) 17:21:51
>>771 「どうよ」って、何が?
0773デフォルトの名無しさん2008/06/21(土) 18:47:50
gcc の Makefile の変数定義で = を使うところで := とする方法もあったかと思ったのだ
0774デフォルトの名無しさん2008/06/21(土) 20:51:29
>>773 そのとおりだが、それがどうした?
0775デフォルトの名無しさん2008/06/21(土) 21:11:53
>>768
make.confとかは?
0776デフォルトの名無しさん2008/06/22(日) 01:31:07
>>769
なるほど、んじゃBSD make 用になにか考える方向ですかね…
0777デフォルトの名無しさん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の中で行えますか?
0778デフォルトの名無しさん2008/06/26(木) 08:37:19
1行ずつ$SHELLで解釈されるから、
[TAB]echo hoge > doc.txt
[TAB]echo hoge2 >> doc.txt
くらいしか思いつかね。
0779デフォルトの名無しさん2008/06/26(木) 11:01:50
>>777
シェルスクリプトを呼び出すのはダメ?
07807772008/06/26(木) 13:47:45
>>778-779
ありがとうございます。
実際にはあるソフトを立ち上げて、
それにコマンドを打ち込むという作業なので、
結局shell scriptを作りました。
0781デフォルトの名無しさん2008/06/29(日) 07:06:00
すみません。皆さんの力をかしてください。
makeを長い事使っているのですが、あんまり踏み込んで使った事はありません。
今回もこった事をするつもりはなかったのですが、なんか基本的なことでつまずいてしまって困っています。
以下の例のように、Makefileがあるディレクトリとは別のディレクトリに
ソースコードがあり、コンパイルしてできるオブジェクトも別ディレクトリに
置きたいという状況で、暗黙のルールを使うと以下のように nothing to be done
といわれてなにもコンパイルしてくれません。なぜダメなのかまったく理解できません。
srcかobjをやめたり、暗黙のルールをやめれば期待通りにコンパイルしてくれるのですが、今回それはやめられないので困っています。
暗黙のルールを使うのは、なにか別の方法で同じことができればそれでもよいのですが...make gruのアドバイスをお願いします。
0782デフォルトの名無しさん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'.
07837812008/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

今回も人にきちんと質問すると自己解決することがあるという典型例でした。。。
あと一晩寝ると解決するともいう。
皆さんありがとうございました。
0784デフォルトの名無しさん2008/06/29(日) 11:54:38
ディレクトリを移動してmakeするようにmakefileを書けばいいと思ったらそういう解決策を見つけたか。
なるほど。
0785デフォルトの名無しさん2008/07/12(土) 18:13:03
中括弧かっこいい
0786デフォルトの名無しさん2008/07/12(土) 19:51:50
>>785
貴様!小括弧派の回し者か!
0787デフォルトの名無しさん2008/07/13(日) 00:37:04
角括弧こそがカクイイ。
0788デフォルトの名無しさん2008/07/13(日) 11:28:45
せっかくだから俺はこの中空鉤括弧を選ぶぜ
0789デフォルトの名無しさん2008/07/13(日) 12:55:37
カーリーブレイス・・・
鉄の絆・・・
0790デフォルトの名無しさん2008/07/18(金) 13:18:31
builditってのもあるのか
色々あるんだなぁ
0791デフォルトの名無しさん2008/07/18(金) 19:09:33
buildbotとかいうのもあったぞ
確かPython製
0792デフォルトの名無しさん2008/07/18(金) 19:34:24
makeの書き方わからなくて修正できないヽ(`Д´)ノウワァァン
0793デフォルトの名無しさん2008/07/18(金) 19:44:56
Makefileといわずにmakeとな
0794デフォルトの名無しさん2008/07/18(金) 20:56:05
あぁMakefileだわ・・・
makeはバイナリであるね・・・
0795デフォルトの名無しさん2008/07/18(金) 22:15:32
最近、コンパイルコマンドが並んだだけのスクリプト(バッチ)を
実行することをmakeと呼んでいる状況に遭遇した不運な香具師は
いる?
0796デフォルトの名無しさん2008/07/19(土) 03:09:35
それをビルドと呼ぶ馬鹿はいた。
0797デフォルトの名無しさん2008/07/19(土) 10:14:47
runhaskell configure
runhaskell build
runhaskell install
0798デフォルトの名無しさん2008/07/19(土) 13:31:31
> それをビルドと呼ぶ馬鹿はいた。
?
ビルドに明確な定義があるか?
コンパイルとかリンクとは根本的に違うだろ
0799デフォルトの名無しさん2008/07/19(土) 16:29:51
コンパイルやリンクの手順をスクリプトに書いて、それを実行する事を
ビルドと呼ぶのは、とても正しい気がする。
0800デフォルトの名無しさん2008/07/19(土) 19:10:12
IDE上でコンパイルするとビルド?
0801デフォルトの名無しさん2008/07/19(土) 19:34:45
python setup.py --configure
python setup.py --build
python setup.py --install
0802デフォルトの名無しさん2008/07/26(土) 11:34:59
ビルドの負荷を軽減させるためにできたのがmakeだからな
08037512008/08/14(木) 11:45:37
scons1.0.0が出たがバグが修正されていなかった件について

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

0807デフォルトの名無しさん2008/08/15(金) 12:02:49
おぉ、それはすまなかった。
0808デフォルトの名無しさん2008/09/13(土) 11:14:31
lispのdslとして実装されたMake replacementは無いんですか?
rakeやsconsのscheme, common lisp版みたいなの
なかったら自分で作りたいぐらいに欲しいのですが、もうあるよというならば情報おねがいします
0809デフォルトの名無しさん2008/09/13(土) 17:24:02
cokeとかpepsiみたいなのの派生みたいなのでありそうだけどな
0810デフォルトの名無しさん2008/09/13(土) 22:09:53
働いたらmakeだと思っています
0811デフォルトの名無しさん2008/09/13(土) 22:12:55
>>810
alias kachi "make"
0812デフォルトの名無しさん2008/09/13(土) 23:38:44
>>749
俺は2ちゃんなどの掲示板の書き込みなら文末の句点は省略されてても気にしないがな。
それより適当な位置で改行し、適度に読点を入れて欲しい。
0813デフォルトの名無しさん2008/09/13(土) 23:46:10
先輩お願いです、すっげぇでっかくなったMakefileにこっそりlove:を入れるのやめてください
0814デフォルトの名無しさん2008/09/15(月) 00:54:31
>>808
つ DEFSYSTEM, ASDF
0815デフォルトの名無しさん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'

実行すると上記のエラーになります。
どこが間違ってるのでしょう?
0816デフォルトの名無しさん2008/11/08(土) 20:10:44
make関係なくね
0817デフォルトの名無しさん2008/11/10(月) 12:59:43
>>815
改行文字はどうなっている?
0818デフォルトの名無しさん2008/11/16(日) 01:17:43
改行文字というか、エンコードをeuc-jp-unix,euc-jp-dos,shift-jis-dos,shift-jis-unix
でためしても同じエラーが出る
構文かな?
0819デフォルトの名無しさん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
0820デフォルトの名無しさん2008/11/16(日) 01:28:22
あれはmakeが吐いてるエラーじゃなくて、シェルが吐いてるエラーでしょ。
0821デフォルトの名無しさん2008/11/16(日) 09:27:14
>>815
make -nでコマンド行をプリントさせて、
それをshで実行してみる。そしてデバッグ。
0822デフォルトの名無しさん2008/11/17(月) 17:25:51
複数のディレクトリに分けたソースから一つのDLLを生成するMakefileはどうやってかく?
例:
main/sub1/ソース
sub2/ソース
sub3/ソース
main.dll <-sub1,2,3からこの階層へdllを生成
0823デフォルトの名無しさん2008/11/17(月) 18:09:07
>>822
sub1、sub2、sub3のMakefileでオブジェクト生成、mainのMakefileでそれらのmakeの起動とライブラリ化でいいんじゃね?
0824デフォルトの名無しさん2008/11/26(水) 02:41:36
>>822

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

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

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

SRCS= ¥
main/sub1/ソース.c ¥
sub2/ソース.c ¥
sub3/ソース.c ¥
0826デフォルトの名無しさん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)$.
$. の意味も分かりません。
0827デフォルトの名無しさん2008/12/11(木) 09:32:40
borlandのmakeでは
&&|から行頭|までがファイルに書き出されてファイル名が渡されるはず。
リンカのコマンドラインオプションに@ファイル名ってのがあるでしょ。

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

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

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

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

target: CC=gcc

みたいなことも可能。
0838デフォルトの名無しさん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
0839デフォルトの名無しさん2009/03/13(金) 00:49:10
ぶっちゃけ、makeは欠陥品だから、エレガンスを求めて苦しまない方が得策だよ。

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

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

hoge: hoge
(ターゲット): (ファイル名)
0851デフォルトの名無しさん2009/06/02(火) 10:37:04
>>849 ありがとう。しかし、makefileは修正しないつもりで書きました
結局環境変数を使う方法でうまくいきました
OREORE ?= defaultvalue
main:
$(OREORE)使用コード
0852デフォルトの名無しさん2009/06/02(火) 15:34:15
どのように記述すれば良いのか、を聞いておいてmakefileは修正しないつもりって・・・
まぁ解決したならいいけど
0853デフォルトの名無しさん2009/08/10(月) 21:49:34
age
0854デフォルトの名無しさん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 $< $@

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

本格的にやるなら GNU autotools というバッドノウハウの塊を使う。
08588562009/09/23(水) 06:37:55
>>857
ありがとうございます。
どこかに簡単なので良いのでサンプルはないでしょうか?
08598562009/09/23(水) 06:55:56
unameでやっているのですが、
OS = $(shell uname -s)
と最初に書いたのですが、nmakeで旨く通りません。
0860デフォルトの名無しさん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
0861デフォルトの名無しさん2009/09/23(水) 11:23:45
./compileじゃダメだね。もう一工夫必要。
0862デフォルトの名無しさん2009/09/23(水) 11:52:00
>>859
nmakeって $(shell ...) 使えるん?
0863デフォルトの名無しさん2009/09/23(水) 12:17:26
そもそも、SFUいれてなきゃunameが無い。
0864デフォルトの名無しさん2009/09/24(木) 17:51:04
NTなら最初から%OS%って定義されてなかったっけ
0865デフォルトの名無しさん2009/09/26(土) 20:39:32
> echo %os%
Windows_NT
0866デフォルトの名無しさん2009/09/29(火) 11:30:35
subsystem:
$(MAKE) -C absolutepath

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

どんな Makefile を書いてどんなコマンドラインで実行したときに、そのコマンドが実行される
ことを期待しているの?
0868デフォルトの名無しさん2009/09/29(火) 12:45:40
>>867
まずsubsystemでlibを作成します。
次に「subsystemの記述より下に書いてあるコマンド」ですが、libへのリンクを含むビルドです。
どちらも別々に実行すればうまくいきます。
0869デフォルトの名無しさん2009/09/29(火) 12:46:55
>>868 あ、そう。でもやっぱり(以下 >867 と同文
0870デフォルトの名無しさん2009/09/29(火) 12:48:05
makefileを張れないなら一昨日来やがれです〜
0871デフォルトの名無しさん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 $<
0872デフォルトの名無しさん2009/09/29(火) 15:03:56
-fでMakefile渡してやらなきゃ。
0873デフォルトの名無しさん2009/09/29(火) 15:38:39
>>872
-fで指定するというのは、make実行時?それともsubsystemの中でしょうか?
また、そこでどっちのファイル名を指定すればいいのかも分かりません。
Makefileのファイル名は2つともMakefileなので、-fで指定する必要はないと思うのですが。

0874デフォルトの名無しさん2009/09/30(水) 02:12:18
make -n
make -n subsystem
の出力は?
0875デフォルトの名無しさん2009/09/30(水) 04:40:30
>>871
それが Makefile 全体ってことでいいの?
で、コマンドラインは?
実行したときに表示されるメッセージは?
0876デフォルトの名無しさん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を付けないでやった時と同じ出力になりました。
08778762009/09/30(水) 07:09:42
1つ忘れていました。
Makefileの実行は、コマンドプロンプトでカレントディレクトリをfoo.dがあるフォルダに変えたあと、
make
と打ちました。
0878デフォルトの名無しさん2009/09/30(水) 11:41:27
>>876-877
ゴールを指定してないときは、一番最初に見つかったルールのターゲットがゴールとされる。
その結果で仕様どおり。
0879デフォルトの名無しさん2009/09/30(水) 13:37:34
>>876
いやいや、元のMakefileがあるところで
make subsystem
とやって欲しかったんだけど
0880デフォルトの名無しさん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が作成されません。
0881デフォルトの名無しさん2009/09/30(水) 14:03:51
>>880 >>878
0882デフォルトの名無しさん2009/09/30(水) 14:11:09
超うぜぇ。なんなの?ばかなの?しぬの?

http://www.google.co.jp/search?q=%E3%82%8F%E3%81%8B%E3%82%89%E3%81%AA%E3%81%84%E7%90%86%E7%94%B1
http://www.ecoop.net/coop/translated/GNUMake3.77/make_9.jp.html#SEC83
0883デフォルトの名無しさん2009/09/30(水) 14:13:49
他人が書いてくれたレスにある単語くらい調べないもんかねぇ。
ゴールが必要なのだよゴールが。
0884デフォルトの名無しさん2009/09/30(水) 14:14:50
It makes a person who uses make make.
0885デフォルトの名無しさん2009/09/30(水) 14:18:53
gallを狙え
0886デフォルトの名無しさん2009/09/30(水) 14:35:05
>>882-883
「ゴール」が用語だとは思いませんでした。
複数のターゲットをゴールにする事ができるんですね。

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

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

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

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

え
0904デフォルトの名無しさん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.)
0905デフォルトの名無しさん2009/10/04(日) 23:38:43
make debug とできるようにするか、もしくは
make MODE=debug として中で条件で設定を変える。
0906デフォルトの名無しさん2009/10/05(月) 05:50:30
>>902,905
ターゲットで指定する方法
make debug
マクロで指定する方法
make MODE = debug

ということですよね。
私は後者を考えていました。
0907デフォルトの名無しさん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の処理を継続させるにはどのように書けばよいでしょうか?

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

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

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

all: fuga\hoge.o
//省略
fuga\hoge.o: hoge.c
//省略
をパターンルールで書くにはどうすればいいのでしょうか?
0913デフォルトの名無しさん2009/10/07(水) 13:42:23
>>912
応用しろよ。アホか。
0914デフォルトの名無しさん2009/10/07(水) 13:49:32
>>913
考えてはみたんですけど
all: fuga\hoge.o
によって%はfuga\hogeになりますよね。
この%をhoge.cに変える方法が分からないです。
0915デフォルトの名無しさん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
0916デフォルトの名無しさん2009/10/07(水) 14:12:11
>>915
君はどうなると思ったの?
0917デフォルトの名無しさん2009/10/07(水) 14:20:45
>>916
910 を見て少し考えればわかるだろうと思った。
0918デフォルトの名無しさん2009/10/07(水) 14:33:22
>>917
答えになってないな。
%にディレクトリを含むパスが渡されるのはあってる。
0919デフォルトの名無しさん2009/10/07(水) 17:16:21
cfiles=$(wildcard fuga/*.c)
ofiles=$(cfiles:.c=.o)
all: ofiles

でいいんじゃねえの?
GNU make以外で通用するかは知らんが
0920デフォルトの名無しさん2009/10/07(水) 19:56:43
>>919
thx
ワイルドカードを使う方法でできました。
09219202009/10/07(水) 21:00:35
やっぱりできていなかった。
これだとソースをまとめてコンパイルする方法になっていて、
ソースを1つずつコンパイルして再コンパイルを最小にする最初の目的とは別物でした。
うーん、これ無理なのかな・・・。
0922デフォルトの名無しさん2009/10/08(木) 01:26:09
いや、パターンルールでできるから、ふつうに。
とりあえずマニュアル読んで、書いてみた Makefile 見せてくれ。
0923デフォルトの名無しさん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.
というエラーになります。
0924デフォルトの名無しさん2009/10/08(木) 19:46:44
そのエラーは%.cから%.oを作るルールが分からない、と言っている。

fuga\%.o: %.c
  $(CC) $(CFLAGS) -c &< -o $@
0925デフォルトの名無しさん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 してみるといいかもしれない。
0926デフォルトの名無しさん2009/10/09(金) 10:54:20
.PHONY: hoge
hoge:
prompt hoge

.PHONY: fuga
fuga:
prompt fuga

.PHONY: piyo
piyo:
prompt piyo

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

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

そして\を/に変えたらエラーはでなくなりました。
ありがとうございました。。
0930デフォルトの名無しさん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と書くとうまくいかないのでしょうか?
.
0931デフォルトの名無しさん2009/10/24(土) 11:12:47
>>930
.SUFFIXES: .obj
0932デフォルトの名無しさん2009/10/24(土) 19:59:28
>>930
変にサフィックスルールを使おうとしてうまくいってない感じだね。
ちょっと前に出てるパターンルールで書いたほうがいいよ。
0933デフォルトの名無しさん2009/11/02(月) 04:49:57
メイク便利過ぎワロタwwwwwwwww
アニラジをwavで録音して番組毎に分割した後、

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

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

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

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

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

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

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

hoge.o: hogr.h

と書いてhoge.cppが変更された場合でもコンパイルされる理由がわかりません。
0957デフォルトの名無しさん2009/11/26(木) 10:16:53
>>956
いえ、コンパイルされませんよ
0958デフォルトの名無しさん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
0959デフォルトの名無しさん2009/11/26(木) 10:26:43
.c => .cppと読み替えてくれ。
0960デフォルトの名無しさん2009/11/26(木) 12:19:35
わかりやすい説明ありがとう
0961デフォルトの名無しさん2010/01/07(木) 05:26:19
Windowsのコマンドライン環境下で、もしIntelコンパイラがインストールされているならiclを
もしそうでないなら、clをつかうようにしたいのですが、Makefileはどのように書けばよいのでしょうか?
0962デフォルトの名無しさん2010/01/07(木) 10:00:41
環境変数CCにでも入れておいたらどうよ。
0963デフォルトの名無しさん2010/01/07(木) 11:07:56
nmake

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

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

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

この例だとメリットないと思うが、-helpみたいな何もしないで正常終了させる
オプションがないコマンドを調べるのには使えるかも。
0971デフォルトの名無しさん2010/01/08(金) 14:11:18
intel ccってインストールするとパス通すのか? vcは通さないよな。
0972デフォルトの名無しさん2010/01/08(金) 17:54:21
iclって、Win版のパラメータは /help とかじゃないのかな?
ちなみに、Linux版はインストールしても環境変数設定スクリプトが着いてくるだけ。
0973デフォルトの名無しさん2010/01/09(土) 08:18:53
Windows版も通常のコマンドプロンプトから使いたいなら自分で環境変数を追加売る必要がある
0974デフォルトの名無しさん2010/01/09(土) 09:47:33
それじゃ、まじめにやるならインストール情報を読むスクリプト組む。
手抜きならインストールパス決め打ち。
0975デフォルトの名無しさん2010/01/09(土) 10:23:38
Windowsでスクリプトって何使えばいいの?
0976デフォルトの名無しさん2010/01/09(土) 10:27:26
JScriptかVBScript
理由: わざわざインストールしないで済む。
0977デフォルトの名無しさん2010/01/09(土) 12:07:29
>>976
マイナーすぎてわからないので書いてください
0978デフォルトの名無しさん2010/01/09(土) 12:19:57
JScript, VBScriptがマイナーというのならnmakeを使うのは諦めなさい。
0979デフォルトの名無しさん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
0980デフォルトの名無しさん2010/01/11(月) 07:54:10
>>979
後者のメッセージを見ると、「ccコマンドが見付からない」
って言われているんじゃないか?
0981デフォルトの名無しさん2010/01/11(月) 09:28:53
腐ったローカライゼーションは捨てて、オリジナルの英語のエラーメッセージを
持って来い。質問はそれからだ。
0982デフォルトの名無しさん2010/01/11(月) 23:15:15
>979
おかしいと思ったのならちょっとくらい Makefile 読もうぜ。
make sharedlib_win32 staticlib_win32
0983デフォルトの名無しさん2010/01/12(火) 06:08:41
>>978
nmakeじゃなくてcygwinのmakeを使っています。
0984デフォルトの名無しさん2010/01/12(火) 06:29:29
もうすぐ次スレ
スレタイが楽しみだわ
0985デフォルトの名無しさん2010/01/12(火) 07:56:33
>>984
make組 その2
0986デフォルトの名無しさん2010/01/12(火) 10:12:41
>>985
いやああああ
>>60近辺のおされ路線でお願いします
0987デフォルトの名無しさん2010/01/13(水) 00:57:08
make makes us madがいいな
レス数が950を超えています。1000を超えると書き込みができなくなります。