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

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

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

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


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

267:山崎渉
03/04/17 16:04
(^^)

268:山崎渉
03/04/20 03:54
   ∧_∧
  (  ^^ )< ぬるぽ(^^)

269:デフォルトの名無しさん
03/05/26 21:53
GNU make 3.79 使ってます。
make の本(GNU make の本ではありません)に

.SUFFIXES:

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

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


実際に問題が発生した例)
debug.cpp と debug ターゲットがある場合、
make debug とやると .cpp: サフィックスルールも適用されてしまう。

270:デフォルトの名無しさん
03/05/26 21:58
unameじゃだめなの?

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

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

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

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

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

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

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

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

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

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

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

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

279:山崎 渉
03/07/15 10:44

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

280:山崎 渉
03/07/15 14:04

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

281:デフォルトの名無しさん
03/07/23 21:24
最近、Linux、Solarisの開発を始めた者です。
gmakeの質問させてください。

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

って感じで動かしてたんですが、
Solaris8に移植してgmakeかけようとしたら
/bin/sh: test: 引数が足りません。
とか言われてしまいます。
[-e $(DEPDIR)]
でなんでつまづくかわかりません。
ご存知の方がいたら、教えてもらえないでしょうか

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

283:デフォルトの名無しさん
03/07/24 17:53
あるだろ。
URLリンク(www.freebsd.org)

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

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

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

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


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


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

287:デフォルトの名無しさん
03/07/25 12:45
>>286

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



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

って書いたら *.o がない時点でエラーになっちゃって *.a が消されません
みなさんはこういう時ってどうしますか?
rm *.o *.a とかでしょうか?

289:デフォルトの名無しさん
03/07/27 19:42
-rm
rm -f *.o *.a

290:山崎 渉
03/08/02 02:16
(^^)

291:三村
03/08/04 21:16
>>276
えろいひとかよっ!

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

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

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

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

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

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

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

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

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

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

301:デフォルトの名無しさん
03/09/16 23:53
出来れば300日間放置してほしかった

302:デフォルトの名無しさん
03/09/18 17:58
すみません。FreeBSD の make で使える

.for n in $(NAMES)
.for v in $(VALUES)

result-$(v)-$(n): foobar data-$(n)
./foobar $(v) < data-$(n) > result-$(v)-$(n)

.endfor
.endfor

こういう構文を GNU make で書くにはどうすればいいんでしょうか?
ループが一重なら % を使って書けるのですが、2つ変化する部分があると
どう書いたらいいものか...


303:デフォルトの名無しさん
03/09/19 06:28
3.80から使えるeval(URLリンク(www.gnu.org))を使えば、

define RULE_TEMPLATE
 result-$(v)-$(n) : foobar data-$(n)
 ./foobar $(v) < data-$(n) > result-$(v)-$(n)
endef
$(eval $(foreach n,$(NAMES),$(foreach v,$(VALUES),$(RULE_TEMPLATE))))

と書けるみたい。(全角スペースはタブね)

304:デフォルトの名無しさん
03/09/22 14:35
makeの次がantとはね・・・
この中間にある書きやすくて読みやすくて高機能なビルド支援ツールってないのかね。

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


306:303
03/09/23 07:12
>>305
eval使わない場合は、 -include のファイルが更新対象になるのを利用して、

NAMES:=a b c
VALUES:=1 2 3

RULE_FILE:=.rules
$(RULE_FILE) : $(MAKEFILE)
 { \
  $(foreach n,$(NAMES),$(foreach v,$(VALUES), \
   echo 'result-$(v)-$(n) : foobar data-$(n)' ;\
   echo ' ./foobar $(v) < data-$(n) > result-$(v)-$(n)' ;\
  )) \
 }>$@
-include $(RULE_FILE)

と書けるみたい。(全角スペースはタブね)

307:302
03/09/24 01:29
>>306
おお、makefile を更新したら、ちゃんとルールファイルを更新してから
include するんですね。これは使えそうです。どうも、ありがと。

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


308:デフォルトの名無しさん
03/10/06 03:34
ant

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

310:デフォルトの名無しさん
03/10/25 02:26
ム板の板歌

パスカルに逢わせてくれてありがとう〜♪

311:デフォルトの名無しさん
03/10/25 04:51
どなたか教えてください。(SunOS)

Makefile
--------------------
FILE_1 = a.tmp
FILE_2 = ${FILES_1:.tmp=.tmp2}

FILE_3 = *.tmp
FILE_4 = ${FILES_3:.tmp=.tmp2}

all::
@echo ${FILES_1}
@echo ${FILES_2}
@echo ${FILES_3}
@echo ${FILES_4}
--------------------

実行結果
> make
a.tmp
a.tmp2
a.tmp
*.tmp2

FILES_4 でFILES_2 と同じ結果を得たいのですが、
思ったようにできません。
make のみで FILES_2 と同じ内容を FILES_4 に
設定することは可能でしょうか?


312:デフォルトの名無しさん
03/10/30 22:43
さわやかSUN組

313:デフォルトの名無しさん
03/11/04 03:00
GNU make の $(error ...) ってどのバージョンから使えるんですか?

314:デフォルトの名無しさん
03/11/16 00:07
makeのスレなんて流行らないよ。
makeなんて初心者虐め、他文化虐め、異端者排除の大好きなUN*X厨の道具だもの。
その証拠にこのスレでは幾多の質問が無かった事のように流されてきたじゃない?

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

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


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

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

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

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


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

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

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

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

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

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

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

327:デフォルトの名無しさん
03/11/18 10:03
>>326
同位。
あんな変態的なのがmakeを名乗るな。

しょうがないのでこういうスクリプトをbmakeとつけて使ってる。

#!/bin/sh

bccdir=`type bcc32`
bccdir="${bccdir#bcc32 is }"
bccdir="${bccdir%/*}"
if [ -z "$bccdir" ]; then
    echo "$0: bcc32 not found" 1>&2
    exit 1
fi
if [ "x$1" = x-C ]; then
    cd "$2"
    shift 2
fi
PATH="$bccdir:$PATH" exec make "$@"


328:デフォルトの名無しさん
03/11/19 00:52
WideStudioのmingw(GCC WIN32版)とC++Builder6も衝突。
makeをgmake.exeにリネームするとmakeを起動するmakefileが
通らんので、環境変数からmingw32-make.exeのあるディレクトリを
検索し、PATHの中身を並べ替えてexecvp("make.exe"...する
wmake.exeを書かされた。

void rebuild(std::vector<std::string> &buff,
const char *name, char slash = '\\') {
 for (std::vector<std::string>::iterator it = buff.begin();
  it != buff.end(); it++) {
  struct stat st;
  if (stat((*it + slash + name).c_str(), &st)) {
   ; /* ignore:win32-execvpは存在しないディレクトリもPATHに書いていい */
  } else {
   std::string s = *it;
   buff.erase(it);
   buff.insert(buff.begin(), s);
   return;
  }
 }
 throw std::runtime_error(std::strerror(ENOENT));
}

329:デフォルトの名無しさん
03/11/19 01:01
書かされたって仕事でWideStudio使ってるのか?

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

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

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

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

333:デフォルトの名無しさん
03/11/24 14:07
いまはリモート接続とかあるけどね

334:デフォルトの名無しさん
03/11/30 07:18
Cygwinのmakeで
OSTYPE=$(shell echo $$OSTYPE)
とやってもOSTYPEが空のままなんだけどどうすればいいの?
bashでecho $OSTYPEだとcygwinって表示されるし
linuxでは普通にOSTYPE=linux-gnuがセットされるのに。

335:時代錯誤
03/11/30 07:33
javaならxmlで記述するからな〜。makeかぁ、懐かしいね〜隔世の感・・・

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

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

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

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

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

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

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

ををっ、腹ショー!!

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

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

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

debug:; $(DEBUGGER) $(TARGET)


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

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

347:デフォルトの名無しさん
03/12/20 15:20
>>8
make: don't know how to make love


348:デフォルトの名無しさん
04/02/14 01:54
make は好きなんで age てみたり.

ところで, Makefile で使う変数名で慣用的なものってどんなのがありますか.
CC, CXX, CFLAGS, LDFLAGS, LIBS あたりはみんな普通に使うんじゃないかと
思うのですが.

349:デフォルトの名無しさん
04/02/14 02:05
mingwのgmakeはUNIX同様に実行ファイルにサフィックス無しを
デフォルトにしてるんで、ターゲットの日付を見てくれましぇん。
なんでこんな変な仕様にしたんだろ。

おきて破りで環境変数MAKEFILES=C:/gcc/etc/make.defsをやってる。

.SUFFIXES:.exe .a .ln .o .c .cc .C .cpp .p .f .F .r .y .l .s .S \
.mod .sym .def .h .w .ch .web .sh
STDLDFLAGS = -Wl,-LC:/gcc/lib
.c.exe:
$(CC) $(CFLAGS) -o $@ $< $(STDLDFLAGS) $(LIBS)
.cc.exe:
$(CXX) $(CXXFLAGS) -o $@ $< $(STDLDFLAGS) $(LIBS)

350:デフォルトの名無しさん
04/02/14 02:21
makeはわかるけどconfigureの書き方がわからない


351:デフォルトの名無しさん
04/02/14 15:35
>>350
さすがに configure 直書きとかじゃないよな?
Autoconf 使ってるのなら↓からぱくってくるなり参考にすればいいんじゃないかな。
URLリンク(www.gnu.org)

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

353:デフォルトの名無しさん
04/03/25 06:14
>>348
make -np | grep "="

354:デフォルトの名無しさん
04/03/30 17:50
MSYS + MinGW なんですが、
コンパイルにかかった時間を簡単に計るのは、どうやったらいいですか?
今は、
all: date target.exe
date:
  date
target.exe: target.cpp
  コンパイル
  date
みたいにしてます。

355:デフォルトの名無しさん
04/03/30 17:57
>>354
ストップウォッチ

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

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

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

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

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

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

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

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

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

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

363:358
04/04/25 13:29
>>362
言語?あ・・・。

すいません。GNU makeです。

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

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


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

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

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

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

368:デフォルトの名無しさん
04/05/21 16:29
>>367
もし,Makefileを手で書いてるなら,g++のオプション-Dを使って,
DEFS = -DWORDS_BIGENDIAN
hoge.o: hoge.cpp
g++ $(DEFS) hoge.cpp
で,ソースの中でプリプロセッサ使ってディスパッチすればいいと思います.
autoheader,autoconf,automake辺りを導入すると更に自動化できて,
例えば,configure.acに,
AC_C_BIGENDIAN
と書いてconfigureを作っておくと,
./configureした環境に合わせてWORDS_BIGENDIANってのを
勝手にdefineしたりしなかったりしたヘッダを自動で作ってくれたりしてくれて
なかなか,便利です.
autoheader,autoconf,automakeの使い方は複雑なのでググッて調べて下さい.


369:367
04/05/21 16:31
>>368
ふええ 懇切丁寧にありがとうございます
いくらググッても なかなか出てこなくて困惑していたんです
ありがとうございます


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


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

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

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

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

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

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

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

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

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


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


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

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

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

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

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

384:376
04/06/24 16:15
>>378,>>382

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

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


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

387:デフォルトの名無しさん
04/06/24 19:53
>>386
fURLリンク(ftp.ascii.co.jp)
だと古い?一つ前なんだけど。


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

389:376
04/06/25 21:56
>>385
サンクスコ

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

おせーてくだされ。

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

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

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

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

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

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

393:デフォルトの名無しさん
04/07/23 13:07
総入れ歯、むかし居た会社で
nmake を「ナマケ」て呼んでた '`,、('∀`)'`,、

394:デフォルトの名無しさん
04/07/23 19:51
誘導されてきました

Makefileの中に引数で条件分岐できるif文書きたいんだけど
どうしたらいいでしか?

395:デフォルトの名無しさん
04/07/23 19:53
Make makes make making many problems.

396:デフォルトの名無しさん
04/07/23 19:56
make make make!

397:デフォルトの名無しさん
04/07/23 20:08
>>394
URLリンク(www.ecoop.net)


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

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

400:デフォルトの名無しさん
04/07/26 00:21
>>399 URLリンク(www.gnu.org)

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

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

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

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

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

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

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

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

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

408:デフォルトの名無しさん
04/10/28 01:46:23
URLリンク(make.paulandlesley.org)
-MMD だけで良いと思ってましたが、だめなようです。
どなたか解説していただけませんか。

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

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

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

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

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

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

412:デフォルトの名無しさん
04/10/30 22:36:17
URLリンク(www.microsoft.com)
GNU make で上のようなことはできませんか?

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

443:M.B.
04/11/13 23:13:39
ぶかー。

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

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

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

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

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

449:M.B.
04/11/14 00:50:29
ここでも言われた _| ̄|○

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

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

マニュアル読め
URLリンク(www.ecoop.net)


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

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

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

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


455:デフォルトの名無しさん
04/11/21 18:16:18
>>454
少し調べてみた。

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

source1.txtが更新されると、「do task 1」が表示され、source2.txtが更新されると「do task 2」が更新される。
両方更新されると、両方表示される。
コロンをひとつにすると、同じターゲットに対するコマンドが二つあると警告が出て、両方更新された場合にも一方のコマンドしか実行されなくなる。
マニュアルにある通り、どのソースが変更されたかによって実行するコマンドを切り替えるための方法だと思う。


456:make に代わる次世代標準
04/11/21 21:03:13
make ってそろそろ引退してほしい。
make に代わる次世代標準はありませんか?
ちなみに Ant は処理系が Java で書かれているし XML 記法だからやだ。


457:デフォルトの名無しさん
04/11/21 21:04:44
make が sh と結びついている時点で最悪なんだよ。
perl か python と結びついてほしい。
たいていの UNIX には perl や python は入っているだろうし。

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


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

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

461:デフォルトの名無しさん
04/11/22 02:57:27
>>456
次世代標準なんかじゃないけど、jamとかどうですか?
URLリンク(www.freetype.org)


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


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


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

a.hpp : b.hpp

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


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

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

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

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


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

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

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


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


471:466(464)=470
04/11/23 19:49:50
466(464)=470です。すいません。

472:デフォルトの名無しさん
04/11/23 21:02:27
>>464
自分も最近makeを使い始めたんですが、ヘッダファイルをターゲットとして指定するのがそもそも間違いでは??
ターゲットはあくまで、その下の行のコマンドによって作成されるターゲットであるはずです。
つまり>>466の場合では、a.hppは、b.hppから”作成"されるわけではないので(ただインクルードされているだけ)、
a.hpp : b.hpp とa.hppをターゲットとして書くのはおかしい気がします。
(ターゲットにヘッダファイルが指定された時にmakeがどのような動作をするのかわかりませんでしたが)

こういう場合は、

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

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

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

しかしこれでは、ファイルが増えて来た時に大変そうなので、他にもっと良い方法があるのかも知れませんが…。

473:デフォルトの名無しさん
04/11/23 21:10:51
> もしくは、
>
> ソースファイル: ヘッダファイル1 ヘッダファイル2

ああ、すいませんこれは間違ってますね。
オブジェクトファイルをターゲットとするべきだと思います。

474:デフォルトの名無しさん
04/12/22 18:34:39
外部コマンドを実行するときに
hoge.h : hoge.list
    hmaker.exe --prefix=hoge hoge.list

みたいなふうにしたんですが、この=が原因でこの文がマクロ変数に
代入してる式みたいなふうに認識されてしまい升。nmake.exeです。
どうすればいいんでしょうか。

475:デフォルトの名無しさん
04/12/23 03:08:59
make makes make make many problems.

476:デフォルトの名無しさん
04/12/25 02:20:57
cmake使ってる人いる?

477:デフォルトの名無しさん
05/03/02 02:16:06
ソースツリーの中から必要な.h,.cファイルを抜き出すために、
.cのファイルのリスト(SRC)を元にgcc -MMで出力される依存関係を出力し、
それをパースして、必要な.cと.hファイルを出力するperlスクリプトを書いてみました。
files.txt:
gcc -MM $(CFLAGS) $(SRCS) | parse.pl > $@
みたいな感じです。
で、生成されたファイルの中身は、
../src/a.h
../src/dir/b.h
のようにファイルが羅列されており、
これらのパスの"../src"を"package/src"に置き換えたパスにコピーしたいと思っています。
そのルールを書きたいのですが、
srcpackage: files.txt
srcpackage: DSTFILES=$(subst ../,package/src,$(shell cat files.txt))
srcpackage: $(DSTFILES);
../package/%.h : ../src/%.h
  cp $^ $@
../package/%.c : ../src/%.c
  cp $^ $@
と書いてみたところ、下二つのルールにひっかからず、コピーできないでいます。
他に、
%.c:
cp $@ $(subst package/src, ../ , $@)
というのも試してみましたが、
srcpackageがsrcpackage.cとひっかかってしまい、うまくコピーができません。
どなたかご教示いただけないでしょうか?

478:デフォルトの名無しさん
05/03/02 02:20:46
>>477
> srcpackage: files.txt
> srcpackage: DSTFILES=$(subst ../,package/src,$(shell cat files.txt))
> srcpackage: $(DSTFILES);

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

479:477
05/03/02 16:26:25
>>478
1行目:srcpackageを作るにはまずファイルのリスト(files.txt)への依存を定義
2行目:ファイルのリストのテキストを読み込み、コピー先のパスに書き換え、変数に代入
3行目:コピー先のファイルへの依存を定義
ということをやりたかったのですが、

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

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

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

と書き、別のファイル(Makefile.copy)で、
copy: $(subst ../src, package/src, $(shell cat file.txt|./parse.pl | sort | uniq));
%.c:
  コピー処理
%.h:
  コピー処理
としてみました。

480:デフォルトの名無しさん
05/03/02 20:34:06
>>479
srcpackage: file.txt
を「srcpackageを作るためにはfile.txtが必要」と読め。

481:デフォルトの名無しさん
05/03/03 00:44:11
>>479
やっぱりマニュアル読んで出直せ。

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

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

> srcpackage: $(DSTFILES);

これは
srcpackage:
 $(DSTFILES)
と同じ意味。
srcpackage を $(DSTFILES) に依存させるのであれば最後のセミコロンを削除しろ。

482:デフォルトの名無しさん
05/03/03 00:55:16
>>477
# ここらへんで SRCS を定義しておくこと。

ASSIGNMENT_OF_USEDFILES:=assignment_of_USEDFILES.mak

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

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

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

.PHONY : srcpackage

srcpackage : $(DSTFILES)

# 動作未確認


483:477
05/03/04 16:25:30
>>480
すみません。以後気をつけます。

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

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

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

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

適用されるよ。ルールじゃなくてコマンドに、だけど。

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

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

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

とおもったら、
>>358-360 で少し似た話がでていたようですね。
文字列操作関数の問題が解決してないのか。

486:デフォルトの名無しさん
05/04/27 22:07:37
sconsってどう
URLリンク(www.scons.org)

487:デフォルトの名無しさん
05/05/16 15:24:34
nmakeの使い方を教えてください 


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

5375日前に更新/188 KB
担当:undef