make makes many problemsat TECH
make makes many problems - 暇つぶし2ch511:507
05/08/17 23:01:21
返信あざっす!

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

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

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

-include xxxxx.mk

URLリンク(www.ecoop.net)

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


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

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

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

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


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

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

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

517:516
05/08/19 02:20:34
substはシェルのコマンドのsubstね

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

519:デフォルトの名無しさん
05/08/19 13:58:59
NTFSの仕様は糞だよな

520:507
05/08/21 01:39:22
>>516
短い名前かぁ。盲点ですた。

>>518
まじっすか

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

521:507
05/08/21 01:40:59
やば。age設定になってた。ゴメス(^ω^;)

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

523:デフォルトの名無しさん
05/08/23 13:28:11
絶対パスで格納するうんこ仕様

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


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

526:デフォルトの名無しさん
05/08/28 20:53:45
展開ってどういう意味?

527:デフォルトの名無しさん
05/08/28 21:02:30
配置って意味でそ

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

529:デフォルトの名無しさん
05/08/28 21:37:51
>>524

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


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

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

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

532:デフォルトの名無しさん
05/10/24 15:09:47
ageさせていただきます。

533:デフォルトの名無しさん
05/10/24 16:45:07
ミャケでございます。
質問でございます。

SRCS = \
  xxx/yyy/zzz/aiueo.cpp \
  qqq/rrr/kakikueyo.cpp \
  nnn/ooo/sashimidesu.cpp \

OBJS = $(patsubst %.cpp,obj/%.o,$(SRCS))

このようにしているのですが
OBJSの中身が
obj/xxx/yyy/zzz/aiueo.o
obj/qqq/rrr/kakikueyo.o
obj/nnn/ooo/sashimidesu.o
のようになってしまい、ディレクトリ毎にルールを設定しないと
No rule to make target obj/xxx/yyy/zzz/aiueo.o
のようなエラーが出てしまいます。
*.cppから*.oへの変形途中に
obj/aiueo.o
obj/kakikueyo.o
obj/sashimidesu.o
のように変形させる方法はありませんでしょうか?
gmake 3.80です。宜しくお願いします。



534:デフォルトの名無しさん
05/10/24 23:25:09
>>531
make -f 使えばいいんじゃないの?

535:デフォルトの名無しさん
05/10/24 23:26:55
>>533
$(notdir ...)

536:ミャケでございます
05/10/25 10:39:38
>>535
ありがとうございます。うまくいきました。

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

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

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

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

538:デフォルトの名無しさん
05/11/04 10:30:57
>>537
デフォルトの規則をそのまま使えばいいのに…

539:デフォルトの名無しさん
05/11/04 11:30:34
>>538
VPath使ってたら明示せざるを得なくなった

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

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

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

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

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

541:540
05/11/12 21:11:08
(続き)

> X.b: x.b y.b z.b
> %.a: %.b
> @# dummy

環境は GNU Make 3.80 です.

アドバイスお願いします.

----------------------------------
X.b := x.b y.b z.b

%.a: $($(basename $@).b)
@# dummy

%.b:
@echo $@

.SUFFIXES: .a .b


書き忘れましたが,下記のような記述もなんかださいので避けたいです.現状,
こうするしかないかなーと考えていますが...注文が多くてすみません.

%.a:
@$(MAKE) $($(basename $@).b)

542:デフォルトの名無しさん
05/11/29 15:29:14
>>17にある質問と同じ内容なのですが
1ソースファイルから1実行ファイルを作るだけの処理を
一気にまとめてやるにはどういう風にmakeをかけば良いでしょうか?

543:デフォルトの名無しさん
05/11/29 17:37:05
ALL: ari.exe ori.exe haberi.exe imasokari.exe

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

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


545:デフォルトの名無しさん
05/11/29 21:47:33
追加。。。

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

546:デフォルトの名無しさん
05/12/27 13:12:32
オライリーからmake3版でたお

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

548:デフォルトの名無しさん
05/12/28 15:47:52

makefileで
# ----------------------------------------
SRCS = SrcDir/test.cpp\
    SrcDir/Mod1/test2.cpp
    SrcDir/Mod2/test3.cpp

depend:
    g++ -MM -MG $(SRCS) > dep.txt
# ----------------------------------------
こうすると
出力が

test.o: SrcDir/test.cpp
test2.o: SrcDir/test2.cpp
test3.o: SrcDir/test3.cpp

こうなってしまいます。
期待しているのは

SrcDir/test.o: SrcDir/test.cpp
SrcDir/Mod1/test2.o: SrcDir/test2.cpp
SrcDir/Mod2/test3.o: SrcDir/test3.cpp

この形です。
何かdependターゲット内の記述でうまく期待した出力をさせるようにできないでしょうか?

549:デフォルトの名無しさん
05/12/28 22:07:47
>>548
試してないが、これでどうかね?

OBJS = $(SRCS:.cpp=.o)
DEPENDS = $(addsuffix .d, $(OBJS))
$(OBJS) : %.o : %.cpp
 g++ -c $< -o $@ -MD -MP

-include $(DEPENDS)

これなら明示的に make depend しなくても、
コンパイルが成功するたびに最新の依存関係に更新されて便利。

550:548
05/12/29 19:06:14
>>549
依存関係を更新しないと、コンパイルが必要なファイルが分からないので
コンパイルが成功した時に依存関係が更新されても、手遅れではないでしょうか?

今、それぞれに無理やりディレクトリを付与してしまおうと考えていて、
ここまで来ました。
depend:
$(foreach IT,$(SRCS),\
$(RM) $(IT).dep; echo "$(dir $(IT))" > $(IT).dep; g++ -MM $(IT) >> $(IT).dep;\
)
このあとcatか何かでファイルを纏めればいいと思うのですが、問題は
echo "$(dir $(IT))" > $(IT).dep;
の部分で、出力結果に改行が入ってしまいます。
この改行を入れない方法はないでしょうか?

551:デフォルトの名無しさん
05/12/29 21:50:13
VPATH

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

553:548
05/12/30 10:44:49
>>551
VPATHだと、SRCSにわざと含めていない、
別ディレクトリ内の同名ファイルがあると誤動作するんです。

>>552
既に .oファイルが存在する状態でソースコードを編集したら……?
あーあ、 .o よりソースのタイムスタンプが若いからコンパイル対象になるので
無問題なんですね……。

書き込みを拝見する前に力技で解決してしまいました。
力技とはこれ echoex.c
#include <stdio.h>
int main(int argc, char** argv)
{
  for (int i = 1; i < argc; ++i)
  {
    if (i == 1) { printf("%s", argv[i]); }
    else { printf(" %s", argv[i]); }
  }
  
  return 0;
}
これをコンパイルして実行パスを通しておいて
depend:
  $(foreach IT,$(SRCS),\
    $(RM) $(IT).dep; echoex "$(dir $(IT))" > $(IT).dep; g++ -MM $(IT) >> $(IT).dep;\
  )
  cat $(addsuffix .dep,$(SRCS)) > depend.inc
  $(RM) $(addsuffix .dep,$(SRCS))

これで……解決?


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

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

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

.hoge.mage:
 @echo $@ $<

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

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

556:デフォルトの名無しさん
06/03/02 00:05:11
>>554
パターンルール使え。 % 入ってるやつ。

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

557:デフォルトの名無しさん
06/03/02 00:42:40
>>556
SRC = $(wildcard *.hoge)
DEST = $(addprefix ../,$(SRC:.hoge=.mage))

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

../%.mage:%.hoge
 @echo $@ $<

で行けましたー

>DEST の定義で .js ってなってるのは書き込み時の間違いか?
書き換えミスです。

>あと ../ は一つ上のディレクトリだと思う。
ああ、そっか、下でなくて、上ですね。

558:デフォルトの名無しさん
06/03/18 08:08:37
gnu makeでローカルなサッフィクスルールを作りたいのですが、
事情があって生成ファイルにhoge.foo.etcのように複数のピリオドを持たせています。
適切なやり方がありましたら教えてください。


559:デフォルトの名無しさん
06/03/18 18:31:43
>>558
パターンルール使え。 % 入ってるやつ。

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

561:デフォルトの名無しさん
06/03/20 17:28:22
Outside the United States. If you acquired the software
in any other country, the laws of the country
where you live apply.

562:デフォルトの名無しさん
06/03/21 02:51:13
>>560
なにに困ってるのかサッパリわからん。
普通に使い分けられるだろ?

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

564:デフォルトの名無しさん
06/03/24 04:14:47
g++ hoge.cpp -o hoge -O3 -fomit-frame-pointer -funroll-loops -march=opteron -ffast-math
と直接コンパイルしたものと、

CC=g++
CXXFLAGS = -fomit-frame-pointer -funroll-loops -march=opteron -ffast-math
hoge:

というMakefileを作ってコンパイルしたもので、できあがったファイルのサイズが違うのですが
なぜなのでしょうか?

565:デフォルトの名無しさん
06/03/24 07:50:49
コンパイルオプションが違うからwww

566:デフォルトの名無しさん
06/03/24 14:19:56
>>564
お前のその -O3 は一体何なんだと。

567:デフォルトの名無しさん
06/03/24 16:57:22
おっさん

568:デフォルトの名無しさん
06/03/24 18:32:38
90°傾いたウサギ風船

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

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

570:デフォルトの名無しさん
06/03/26 02:24:54
>>569 >>559

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

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

573:デフォルトの名無しさん
06/03/26 08:45:06
>>572 >>559

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

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

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

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

578:569
06/03/26 11:36:59
>>577
all: hoge.exe mage.exe shoge.exe
hoge.exe: hoge.cpp
  gcc $< -o $@
mage.exe: mage.cpp
  gcc $< -o $@
shoge.exe: shoge.cpp
  gcc $< -o $@
とかいたとき、make 一度で 1 cpp -> 1 exe を全部作れます。
それをいちいち hoge mage shoge だのかかないでやりたい。
できますか?

579:デフォルトの名無しさん
06/03/26 12:43:00
>>578 >>559

580:デフォルトの名無しさん
06/03/26 13:15:06
>>579
さぱーりわからん。

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

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

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


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

585:デフォルトの名無しさん
06/03/27 23:19:08
>>559
Thx.
お猿の訳本しか持ってないんでよくわかんなかったけど、
gmakeのマニュアルをちゃんと読むことにします。
URLリンク(www.ipp.mpg.de)

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


587:デフォルトの名無しさん
06/04/13 01:10:04
>>586
make CFLAGS="-DAAA=aaa"
だったような


588:デフォルトの名無しさん
06/04/13 01:12:09
ありがとうございました

589:デフォルトの名無しさん
06/04/22 23:02:52
makeしたら負けかなと思っている

590:デフォルトの名無しさん
06/05/12 02:30:57
rake使ってる人いる?

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

592:デフォルトの名無しさん
06/05/12 23:36:57
Ruby初心者スレより転載
URLリンク(shakenbu.org)

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

594:デフォルトの名無しさん
06/05/13 15:01:29
ほのぼのRake

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

596:デフォルトの名無しさん
06/05/13 23:32:46
makeとantだけでお腹いっぱいです。


597:デフォルトの名無しさん
06/06/01 19:07:06
質問。

hoge.txtとmoge.txtを
それぞれ、xyzzyというツールで、
hoge.fooとmoge.fooに変換したいとします。

他の.txtというファイルは、別のツールで変換したいので、
.foo: .txt というサフィックスルールは使えません。

その場合、

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

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

といちいち書かなくてはいけないのでしょうか。
この
  xyzzy $< $@
という部分を共通化することはできないですか?


598:597
06/06/01 19:13:49
どんなことがやりたいかというと、

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

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

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

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

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


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

602:597
06/06/02 01:01:45
>>601
すげえ!
と思ったけどできませんでした orz

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

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

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

これはスタティックパターンルールっていう構文。
URLリンク(www.gnu.org)

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

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

605:597
06/06/02 02:08:51
わかりました。
>>603のは言っていたのは、正しいです。
本プロジェクトは、hoge.txtがありませんでした。馬鹿だ。

で、どうも根本的にやりたいことを勘違いしておりました orz

hoge_foo_bar.txtやmoge_foo_bar.txtを、hoge_test_bar.foo、moge_test_bar.fooにしたいのでした。

つまり、

hoge_foo_bar.txt→hoge_test_bar.txt
moge_foo_bar.foo→moge_test_bar.foo
という変換をxyzzyというツールで、行いたいのです。
うまいことできないかなー。

606:597
06/06/02 02:09:33
違ってました orz
hoge_foo_bar.txt→hoge_test_bar.foo
moge_foo_bar.txt→moge_test_bar.foo

でした。

607:597
06/06/02 02:20:15
また、違った・・・

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

真ん中のfooとtestだけ違うんです・・・。

608:597
06/06/02 02:25:17
%test%.foo: %foo%.txt
 なんとかかんとか

とすると、うまく行かないみたいです。

TARGET = hoge_bar_test.foo moge_xyzzy_test.foo
で、
%test.foo: %foo.txt
 なんとかかんとか
だとうまくいきます。

%って2回は使えない罠?
名前を変えるところ(foo→test)を最後に持ってくるしかないのだろうか。

609:デフォルトの名無しさん
06/06/02 09:31:03
>>608
% はいっこじゃないとだめ。いっこなら、頭でも途中でもいい。

610:597
06/06/02 19:23:49
了解です。

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

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

612:デフォルトの名無しさん
06/07/22 23:50:02
>>611
語呂が悪い。
make makes many messes のほうがいいかな。

613:デフォルトの名無しさん
06/08/01 14:00:24
暗黙ルールを使うと

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

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

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

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

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

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

617:デフォルトの名無しさん
06/08/01 23:29:50
>>613
暗黙ルール使わなけりゃいいんじゃね?

618:k ◆WFGp1NZuiw
06/08/03 21:43:19
.PRECIOUS を使うとか.
URLリンク(www.ecoop.net)

619:デフォルトの名無しさん
06/09/03 21:28:12
GNU makeで複数の拡張子に同じルールを適用したい時に何度も同じものを
書かずにすむ方法はないでしょうか。
たとえば以下の3つのルールを1つにまとめることはできないでしょうか。

%.x: %.abc
  command1
  command2
  command3

%.x: %.def
  command1
  command2
  command3

%.x: %.ghi
  command1
  command2
  command3

620:デフォルトの名無しさん
06/09/03 21:32:12
>>619
これじゃ駄目か?

%.x:
  command1
  command2
  command3

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

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

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

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

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

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

626:デフォルトの名無しさん
06/09/03 22:16:37
>>625
実際の依存関係を設定してないんじゃないか?

%.x:
 echo $@ $<

に続けて

a.x: a.abc

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

627:デフォルトの名無しさん
06/09/03 22:38:51
>>626
ファイル一つ一つ書かないとダメですか?

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

629:デフォルトの名無しさん
06/09/03 22:58:20
>>628
ありがとうございます。できました。

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

631:デフォルトの名無しさん
06/09/15 17:22:16
mingw + GNU make + コマンドプロンプトを使っとる

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

632:デフォルトの名無しさん
06/09/15 17:54:27
そういうパッチあてなされ

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

634:デフォルトの名無しさん
06/09/17 11:14:28
>nmake love

Microsoft (R) Program Maintenance Utility   Version 6.00.9782.0
Copyright (C) Microsoft Corp 1988-1998. All rights reserved.

NMAKE : fatal error U1073: 'love' のビルド方法が指定されていません。
Stop.

。・゚・(ノД`)・゚・。

635:デフォルトの名無しさん
06/09/17 16:43:39
emacsでMakefile中でもCtr-C,Cを押したらコンパイルする技を
昔ネットで見たのですが忘れてしまいました。
どなたか教えてくれませんか?


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


637:デフォルトの名無しさん
06/09/17 17:05:23
>>631

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


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

639:k ◆WFGp1NZuiw
06/09/30 22:40:57
>>638
URLリンク(www.dodgson.org)

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

641:デフォルトの名無しさん
06/10/20 21:26:55
lispの出来損ないみたい>>makeの文法

642:デフォルトの名無しさん
06/10/21 06:04:16
lisp厨乙

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

GNU MAKE
URLリンク(www.amazon.co.jp)

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

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

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


645:デフォルトの名無しさん
06/10/29 19:04:49
nmakeってsubstとかpatsubstに相当するものないの?

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

647:デフォルトの名無しさん
06/12/03 10:32:31
>>646 何が不満だ?

648:646
06/12/04 02:15:54
>>647
.cも混在してるときに、.cもg++でcompileするでしょ。
そのときに生成されるhoge.oが、
g++ -c hoge.c -o hoge.o
cc -c hoge.c -o hoge.o
で全く同じものになるのかが分からなかったので。

649:デフォルトの名無しさん
06/12/04 10:29:19
man gccしてみろ。


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


651:デフォルトの名無しさん
07/01/04 21:43:34
a.cpp, b.cpp, c.cpp, ... とファイルが沢山あるとき、各々のファイルに対してgrepした結果を
a.log, b.log, c.log とログにしたいんだけど、どうかけばいいですか?

INFO:
  grep COMMENT $(SRCS) > $(LOGS)

みたいにやったら全部のソースを一変にgrepしようとしやがりました。
そうじゃなく個別にやりたいです。


652:デフォルトの名無しさん
07/01/05 01:32:28
それは make でなくシェルスクリプトの話かと。
for i in *.cpp; do grep COMMENT $i > `echo $i|sed -e 's/\.cpp/.log/'`;done
とか。

653:デフォルトの名無しさん
07/01/05 10:41:05
拡張子がcppとlogに決まっているなら、サフィックス・ルールを使用する方法もある。
URLリンク(www.ecoop.net)

654:デフォルトの名無しさん
07/02/13 22:23:13
rakeってC++をmakeできますか?


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

656:デフォルトの名無しさん
07/02/15 03:19:04
>>654
makeの意味わかってる?

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

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

658:デフォルトの名無しさん
07/02/15 22:43:13
>>657
最初は手書きMakefileでいいさ。


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


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



661:デフォルトの名無しさん
07/02/18 13:27:03
rakeとantくらいしかとっさには思い出せないな……


662:autoXXの癌はlibtoolだと思う
07/02/22 01:07:50
共有ライブラリを作らないんだったらautoconf, automake は大体OKだけど。共有ライブラリを作ろうとすると否応無しにで出てくるlibtoolが大嫌いなので書いてみる。

libtoolはクロスコンパイルで「共有ライブラリとそれを利用する共有ライブラリから構成されるパッケージ」を作ることを殆ど考慮してない。

クロスコンパイルだとインストール先ターゲットは/hoegeho/foo/bar とか適当なやつにならざるを得ないケースが多い。
とても/usr/* などにはしてられない。ところがそういう環境だとmake install で「パスのプリフィックスが違います」
エラーが出るわけですよ。実にくだらないんです。だってWindowsだとチェックしないんですから。非Windows環境でやってると結構はまります。
個人としては人生の無駄だし、法人としても無駄なコストです。
その嫌がらせチェックをしている3行程度をコメントアウトすれば平和になるワケだけど。

そうしないと、クロスコンパイル環境でまともに通せるようにするには、
1. 共有ライブラリをnoninst_LIBRARIESにして
2. 展開後のMakefileのルールをMakefile.am に書いてmakeさせ
3. 展開されたあとのinstall処理をMakefile.am に書いておく
くことになるんです。実に馬鹿げてます。本末転倒です。

もしあなたが共有ライブラリを作成してそれをデバッグする必要があるのでしたら、普通に(automakeではなく)伝統的な手書きの makefile を作成してください。
 テスト対象の共有ライブラリは -rpath オプションを使ってテストプログラムにリンクしてください。そうすればあなたは最初から共有ライブラリ内にブレークポイントを
設定できるでしょう。変なシェルスクリプトを噛ます必要は無いのです。
autotools、特にlibtoolは開発者のためのツールではないと認識することが大切です。


663:デフォルトの名無しさん
07/03/20 05:00:53
仕事でjam使ってます。サッパリわかりません


664:デフォルトの名無しさん
07/04/24 17:30:42
Rake
URLリンク(www2s.biglobe.ne.jp)

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

665:デフォルトの名無しさん
07/04/24 20:42:09
>>664
Makefileより見た目ゴチャゴチャしててなんかいやだな。


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

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

667:デフォルトの名無しさん
07/04/24 21:34:27
>>665
ゴチャゴチャしてるという印象はこのへんかね。

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

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



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


669:デフォルトの名無しさん
07/04/24 21:50:45
lakeやらpakeが強いかも。元々適当な言語だし。

670:デフォルトの名無しさん
07/04/24 22:06:16
lakefileは普通のプログラムと見かけ大差なさそう。

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


671:デフォルトの名無しさん
07/04/24 22:31:43
dake

672:デフォルトの名無しさん
07/04/24 23:47:56
やっぱ俺Makefileでいいや・・・

673:デフォルトの名無しさん
07/04/25 01:23:22
delake
VBake
make#


674:デフォルトの名無しさん
07/04/25 01:37:29
>>634
つ♥

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


676:デフォルトの名無しさん
07/04/25 21:31:46
>>675
makedependってこと?


677:デフォルトの名無しさん
07/04/25 21:40:32
require 'rake/loader/makefile'

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

import '.depend.mf'

だろうか。


678:デフォルトの名無しさん
07/04/25 23:22:53
>>664も参照

679:デフォルトの名無しさん
07/04/26 10:50:56
>>676-678
importで導入できるんだね、ありがと


680:奉祝スレ5周年
07/08/17 21:40:54
GNUmakeで--debug=のコマンドで使用できるフラグについて
資料or情報はありませんか?
片っ端からトライしたところ iajvbm の6文字が何らかの機能を
持っているようですが。
巨大makefileのデバッグに使用したいです。

> make -v
GNU Make 3.81
  :
  :
This program built for i686-pc-cygwin
>

681:デフォルトの名無しさん
07/08/17 22:00:45
普通に info に載ってるけど。
man にも簡単な説明が出てる。

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

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

683:デフォルトの名無しさん
07/08/23 02:45:27
>>682
ant, bjam, rake, SCons とかは代替品とは言わんの?

684:デフォルトの名無しさん
07/08/23 05:44:05
autotoolはともかくmakeは無いと困るだろ。

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

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

686:デフォルトの名無しさん
07/08/26 22:45:52
>>682
rakeつかってる

687:デフォルトの名無しさん
07/09/05 19:03:57
Rakeのユーザーガイド見つけた

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

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

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

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


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

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

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

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


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

695:デフォルトの名無しさん
07/10/27 19:15:09
Makefile.mak にすりゃいいんだ

696:デフォルトの名無しさん
07/12/09 23:42:59
>>688
make all clean


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


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

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

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


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

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


699:デフォルトの名無しさん
07/12/24 15:51:55
>>697
THUMBNAIL/%.JPG : IMG/%.JPG
  convert -geometry 150x150 $< $@

700:697
07/12/24 15:56:38
>>698
ありがとうございます。

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

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

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

702:697
07/12/24 16:14:05
>699,701
これだ!ありがとうございます!
うまくいきました

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

704:デフォルトの名無しさん
07/12/30 12:22:59
依存関係が足りないから。

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

705:デフォルトの名無しさん
07/12/30 13:59:11
b.x: e.x
a.x: b.x c.x d.x

%.z: %.x
hoge $^

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


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

706:デフォルトの名無しさん
07/12/31 15:47:10
age

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



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

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

710:デフォルトの名無しさん
08/01/10 12:43:51
include

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


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

712:デフォルトの名無しさん
08/01/22 15:08:09
働いたらmakeかな?

713:デフォルトの名無しさん
08/01/25 15:06:10
GNU makeなんですが、

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

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

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

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


716:デフォルトの名無しさん
08/02/01 21:44:28
>>715
makeの-jオプションのことでいい?

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



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

718:デフォルトの名無しさん
08/02/13 19:24:18
Makefileを確認したら?

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

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

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

722:720
08/02/19 10:18:42
もう少し詳しく教えていただけないでしょうか?
ifの様な構文を使って
CC=cl

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

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


724:720
08/02/19 11:14:26
GNU makeとnmakeです。

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

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

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

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

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


729:デフォルトの名無しさん
08/02/19 13:09:40
>>724
makefileスレに行け。
スレリンク(tech板)

730:デフォルトの名無しさん
08/02/19 13:30:10
これは・・・・いったい・・

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

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

733:729
08/02/19 13:47:30
正解は2番……_/ ̄|◯

734:デフォルトの名無しさん
08/02/19 16:50:40
普通は
makefile.vc
makefile.gcc
makefile.cygwin
makefile.tcc
makefile.pl
makefile.rb
makefile.cobol
のように分けますね

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

736:デフォルトの名無しさん
08/02/19 18:40:30
なぜその方法を知りたいのかが知りたいなぁ。


737:デフォルトの名無しさん
08/02/19 18:50:15
alias make='make -j'

738:デフォルトの名無しさん
08/02/19 19:03:08
あなたは奇妙な感覚に包まれた -more-

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


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

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

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


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

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

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

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

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

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

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

744:デフォルトの名無しさん
08/03/22 19:37:47
filter-out あたりをつかって別に分けるかなぁ。


745:デフォルトの名無しさん
08/03/22 21:57:27
要は

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

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

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

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

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

746:デフォルトの名無しさん
08/04/07 11:39:37
去年までUNIXでMakeをばりばりに使っていました。

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

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

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


747:デフォルトの名無しさん
08/04/07 11:48:52
>>746
日本語でOK。

考えられるのは、MS謹製のVisualStudioについてくるnmakeかCygwinのgnu-makeかね。

748:デフォルトの名無しさん
08/04/07 12:51:51
>>747
ありがと
でも私は日本人ですから日本語不自由ありません

749:デフォルトの名無しさん
08/04/07 13:05:23
人に質問するような文章なら、最低限以下の注意くらいしてもよかろう。

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

処で、コンパイルさせて貰えないのに拾ってきたツールは使ってもいいの?

750:デフォルトの名無しさん
08/04/07 19:52:28
>>746
msysにバイナリのgmakeが入ってる
Current Release: msys-1.0.10 (2004-03-16 05:47)を落とすよろし


最新レス表示
レスジャンプ
類似スレ一覧
スレッドの検索
話題のニュース
おまかせリスト
オプション
しおりを挟む
スレッドに書込
スレッドの一覧
暇つぶし2ch