2017/05/17

[c/c++]またMakefileの名前一致で失敗していた

以前、こういう記事を書いた。
hiro99ma blog: [c/c++]Makefileのdependは名前一致なのか

依存ファイルのオブジェクトファイル部分に相対のパス名が入っていると、うまくいかないようだった、という話だ。
相対というのは、

obj/./test.o

みたいに、間違ってないけど不要な相対パスなのかもしれん。
そこまでは調べていないのだ。

 

そのあと、依存ファイルの作り方を変更することで対応できそうだったという記事を書いた。
hiro99ma blog: [c/c++][make]dependの解決

そのMakefileを使っていたのだが、またうまくいっていなかった。
オブジェクトファイル名をソースファイル名から作っているところで、単にフォルダ名と拡張子だけを変更していたのだが、ソースファイルをさらに別ディレクトリを作っているとダメだったのだ。

 

こんなディレクトリ構成になっている。

_build/
   hello.o
   hello2.o

src/
  hello.c
  hello2/
    hello2.c

だが、ソースファイルをそのままオブジェクト名にしてしまうと、

_build/hello.o
_build/hello2/hello2.o

になっていたのだ。
まあ、単なる考慮漏れだ。

 

あれこれ考えたが、このMakefileはオブジェクトファイルを同じディレクトリに放り込むので、$(notdir)でパスを取り除けばよかろう、という結論に至った。
https://github.com/hirokuma/makefile_hello

オブジェクトファイルを同じディレクトリに置くことの弱点は、同じ名前のソースファイルがあるとダメだ、ということだろう。
一人でやっていると起きないけど、複数人でやっているとやらないとも限らない。
関数名はファイル名に関連したプレフィクスを付けるルールにしておけば対応できると思うが、名前が長くなるのが悩みどころだ。

0 件のコメント:

コメントを投稿

コメントありがとうございます。
スパムかもしれない、と私が思ったら、
申し訳ないですが勝手に削除することもあります。