エンジニアなプログラマ

プログラミング(特にvala言語関連)の話題を取り上げていきます。

現在、新しいクラス図描画ソフトを開発中! http://gridraw.com/

automakeにおけるVALAFLAGSの制限

valacは出力.cファイルの名前を変更することができない。 その影響で、automakeでは、 同じソースを複数のターゲット(PROGRAMSやLIBRARIES)で 使用することができなくなっている。

なぜなら、automakeのvala言語対応においては、 .valaを.cにリネームしたターゲット(以下cターゲット)を 自動生成するからである。

複数のターゲットで同じ.valaソースを指定すると、 同名のcターゲットが複数生成されてしまう。

生成ルールの異なる同名ターゲットが複数生成されるため、 正常にmakeできなくなる。 (正確には後の定義が優先される旨の警告が出る)

vala言語以外(少なくともC言語)では、 フラグ設定の有無に応じて、ターゲット(オブジェクトファイル)名のリネームを 自動的に行ってくれる。

しかし、vala言語においては、 C言語で対応しているようなリネームによる衝突回避を実施してくれない。

このことは(直接ではないが)automakeのマニュアルにも記載されている。

http://www.gnu.org/software/automake/manual/html_node/Vala-Support.html

Note that currently, you cannot use per-target *_VALAFLAGS (see Renamed Objects) to produce different C files from one Vala source file.