シェルスクリプトでmakeするobjectのリストを作成する

私の使用している環境は以下の通りなんですが、
Brew SDK v3.1.2 日本語版
BREW SDK Tools 1.1.1 SP05 日本語版
・VisualStudio 2005
・RealView Compilation Tools v3.0 for BREW
ツールバーMakefile for ARM Compilerでmakを作成すると、OBJSとDependencyリストが空の状態で作成されます。

そこでシェルスクリプトでOBJSとDependencyリストを作成することにします。
ここで作成したスクリプトをmake時に呼び出すことで全て自動化することもできるとおもいます。


ソースファイルが"src"ディレクトリにあるという前提です。
3つのシェルスクリプトファイルで構成します。

command.sh

#!/bin/sh
. listo.sh src > objlist.mak
. listdep.sh src > deplist.mak

listo.sh

#!/bin/sh

echo -n "OBJS = "
echo -n "\$(AEESRCPATH)\AEEAppGen.o "
echo -n "\$(AEESRCPATH)\AEEModGen.o "
for file in `find $1 -name "*.cpp"`; do
  echo -n .\\
  cygpath -w $file | sed -e "s/\.cpp/\.o/" | tr '\012' ' '
done

echo ""
echo -n "LINKOBJS = "
echo -n ".\obj\AEEAppGen.o "
echo -n ".\obj\AEEModGen.o "
for file in `find $1 -name "*.cpp"`; do
  echo -n .\\
  cygpath -w $file | sed -e "s/.*\\\\\(.*\)\.cpp/obj\\\\\1\.o/" | tr '\012' ' '
done

listdep.sh

#!/bin/sh

for file in `find $1 -name "*.cpp"`; do
  cc -MM (プリプロセッサ定義など-DXXX) -I$BREWDIR/inc (他のincludeパス) $file
done


パスなど適宜置き換える必要があると思います。


使い方はcygwin

. command.sh

と叩くだけです。


次に、ツールバーMakefile for ARM Compilerで作成したmakを修正します。
OBJS =の記述を削除し、代わりにinclude objlist.makと書きましょう。
そして、DEPENDENCY LIST, DO NOT EDIT BELOW THIS LINE以下にinclude deplist.makと記述すれば終わりです。


さてlistdep.shについて少し。
cc -MMですが、これはソースファイルの依存のルールを書き出すオプションを指定してコンパイラを呼び出すコマンドです。
includeされたファイルなどを羅列するのですが、コンパイルが通るようにプリプロセッサ定義やincludeディレクトリのパスなど適切なオプションを指定する必要があります。
他のツールやcc以外のコンパイラで同様にリストを吐き出せるものがあれば置き換えても問題ありません。