« SystemCの書籍 2007年5月 | Main | Verilog-Perl »

2007.05.26

Makefile

避けていたけど、しっかり勉強しておいた方が良さそうなので整理。
テスト時などで、ソースファイルとMakefileのディレクトリが違うとき、*.oファイルはMakeを実行した場所に作られるのに(gcc -cオプションのデフォ動作)、ソースファイルのィレクトリの*.oを探しに行くため、毎回全ファイルがコンパイルされてしまう。

元がこんな感じ。
SRCS = xst_log_file_tb.cpp ../../ucfgen/xst_log_file.cpp
OBJS = $(SRCS:.cpp=.o)

これを追加
OBJS_NODIR = $(notdir $(OBJS))

のように組み込み関数notdirを取った物を、依存関係に入れて処理するとうまくいく。

a.exe: $(OBJS_NODIR)
$(CC) $(CFLAGS) $(INCDIR) $(LIBDIR) -o $@ $(OBJS_NODIR) $(LIBS) 2>&1 | c++filt

もっとちゃんとした方法があると思うけど、とりあえこれでOK。

FreeBSDのmakeは、gnu makeと違うと気がつくまでずいぶん悩んだのは秘密。
なんでsystemcのインストール時にgmakeと打つのかようやくわかった。
Cygwinでも同じテクが使えるようにgmakeを使うようにしよう。

|

« SystemCの書籍 2007年5月 | Main | Verilog-Perl »

Comments

やっぱり駄目だった。
ちゃんと依存関係書いた方が早い・・・。
もっと勉強しなくては。

Posted by: なつたん | 2007.05.26 at 05:25 PM

はじめまして。SystemC関連の情報を探していて流れ着きました。
gmakeですが、VPATHという変数でサーチパスを追加することができます。
VPATH = ../../ucfgen/
SRCS = xst_log_file_tb.cpp xst_log_file.cpp
これが正しい使い方なのかという所は疑問なのですが、とりあえずはmakeできると思います。

Posted by: 通りすがり | 2007.05.28 at 10:24 AM

通りすがりさん、こんにちは。

情報ありがとうございました。
VPATHで、ほぼ期待通りの動きをします。同じ名前のファイルが複数あると危険ですが、今のところ大丈夫なので、この方法を使わせていただきます。

Posted by: なつたん | 2007.05.30 at 03:49 AM

GNU makeの本を読んでいたら、VPATHを普通に使っていました。
一つのMakefileでやりきるには、これでいきます。

Posted by: なつたん | 2007.06.05 at 06:38 AM

Post a comment



(Not displayed with comment.)




TrackBack

TrackBack URL for this entry:
http://app.cocolog-nifty.com/t/trackback/18154/15206034

Listed below are links to weblogs that reference Makefile:

« SystemCの書籍 2007年5月 | Main | Verilog-Perl »