ぬうぱんの備忘録

技術系のメモとかいろいろ

作った曲一覧はこちら

Makefileでオブジェクトファイルを列挙する

したいこと

 Makefileに生成するオブジェクトファイルのリストを記述部分がある。ここに並べるオブジェクトファイルはディレクトリ中のソースファイルの拡張子を".o"にしたものなので、自動生成するスクリプトMakefileに埋め込みたい。
 要は面倒臭い。

シェルスクリプトで記述

 Makefileと同じ階層に"EnumObjs.sh"みたいな名前でシェルスクリプトを作成。

#! /bin/sh

# ディレクトリ中のソースファイルを列挙(.c .cc .cpp)
SourceList=`find . \( -name "*.c" -or -name "*.cc" -or -name "*.cpp" \)`

# ソースファイル名の拡張子を.oにしてecho
for Source in $SourceList
do
    Source=`echo $Source | cut -c3-`
    Source=`echo $Source | cut -d'.' -f1`
    Source="$Source.o"
    echo $Source
done

 これを呼び出すことで必要なオブジェクトファイルが標準出力に列挙される。

Makefileシェルスクリプト呼び出し

 必要なオブジェクトをすべて$(OBJS)に入れておくとして次の1行でOK

OBJS = $(shell ./EnumObjs.sh)

 スクリプトはかなりアレかもしれないが、これでソースを追加するたびに手動でオブジェクトファイルを増やさなくて済む。