Automakeのと同じ名前を持つファイル
質問
私はFreeBSDのホスト上でコンパイルするために適応していますC ++のautoconf管理プロジェクトをしました。 元のシステムは、Linuxので、私は建物だホストを区別し、システム固有のファイルにコードを分離するために、1 AM_CONDITIONALとした。
configure.ac
AC_CANONICAL_HOST AM_CONDITIONAL([IS_FREEBSD],false) case $host in *free*) AC_DEFINE([IS_FREEBSD],[1],[FreeBSD Host]) AM_CONDITIONAL([IS_FREEBSD],true) BP_ADD_LDFLAG([-L/usr/local/lib]) ;; esac
Makefile.am
lib_LTLIBRARIES=mylib.la mylib_la_SOURCES=a.cpp \ b.cpp if IS_FREEBSD mylib_la_SOURCES+=freebsd/c.cpp else mylib_la_SOURCES+=linux/c.cpp endif
私はautomakeを実行すると、それはこの種のメッセージで失敗します:
Makefile.am: object `c.lo' created by `linux/c.cpp' and `freebsd/c.cpp'
proccessを構築してもMakefile.inでこの条件を尊重するためにはautomakeを設定する方法上の任意のアイデア?
ファイルはdiferent名前を持っている場合、私はこの作品が、それは、C ++のコードだと、私はクラス名と同じファイル名を維持しようとしています。
事前に感謝します!
解決
は、
と、それぞれのサブディレクトリに建設されるオブジェクトのために要求することができますAUTOMAKE_OPTIONS = subdir-objects
他のヒント
別のオプションは、のサブディレクトリ・オブジェクトのほかに、フラグを構築し、各サブプロジェクトにプロジェクトごとのいくつかのカスタムを与えることです。これを行うと、Automakeはモジュール名にターゲット名を付加する命名規則の.oその*を変更します。たとえば、この:
mylib_la_CXXFLAGS=$(AM_CXXFLAGS)
mylib_la_SOURCES=a.cpp b.cpp
むしろa.oとb.o.よりも、出力ファイルmylib_la-a.oとmylib_la-b.oになりますしたがって、あなたは、それぞれが、たとえば、b.cppファイルを持って同じ出力ディレクトリを持つ2つの異なるプロジェクトを持って、その出力の競合を持っていないことができます。
私は値のautomakeにプロジェクト固有のCXXFLAGSを設定することによってこれをしなかった通知はすでに、AM_CXXFLAGSを使用するつもりでした。 Automakeはこのトリックを検出し、短い* .oの名前を使用するのに十分にスマートではありません。それはあなたがプロジェクトごとのビルド・オプションが必要ですというような場合、あなたはもちろんその代わりに、このハックを行うことができます。