私たちの研究グループのプログラムの一部には、ctemplateライブラリによって提供される補助機能があります。configure
古いクラスターでは、コンパイルのためにソフトウェアをビルドできないため、この機能を分離し、 などのフラグを介して含めるかどうかを制御したいと考えてい--disable-ctemplate
ます。
C++ で記述されたこのソフトウェアは、Autotools ビルド システムを使用しますが、どちらも私はあまり経験がありません。私の理解では、このタスクを達成するには、次のことを行う必要があります。
AC_ARG_ENABLE
で新しいエントリを作成して、configure スクリプトに新しいフラグを追加しますconfigure.ac
。ライブラリを使用するコードと、そのコードを呼び出すすべてのコードの周りに、いくつかの
#ifdef
(または場合によって#ifndef
は) ステートメントを追加します。ctemplate
最初のステップは次のようになると思います。
AC_ARG_ENABLE(ctemplate,
[ --disable-ctemplate Disable HTML output],
[case "${enableval}" in
yes) ctemplate=false ;;
no) ctemplate=true ;;
*) AC_MSG_ERROR(bad value ${enableval} for --disable-ctemplate) ;;
esac],[ctemplate=true])
AM_CONDITIONAL(NOCTEMPLATE, test x$ctemplate = xfalse)
--enable-FLAG
の代わりに使用した例からこの例を適応させたので、ロジックが正しいかどうかはわかりません--disable-FLAG
。
2 番目のステップでは、次のようなプリプロセッサ フラグでセクションをラップします。
#ifndef NOCTEMPLATE
void Class::MethodUsingCtemplate(...)
{
...
}
#endif
私がやった場合、これはすべてを正しく「配線」しconfigure --disable-ctemplate
ますか?
ctemplate
また、これにより、プログラムがコンパイルのためにライブラリに入らないことが保証されますか? そうでない場合、これはすべて無駄です。ctemplate
ライブラリと依存コンポーネントのコンパイルを防止できることが不可欠です。
私は C++ と Autotools の両方に慣れていないことを繰り返します。この問題を解決するために、私は非常に素朴な最初のアプローチを取りました。この分野の経験がある場合は、修正と説明を提供していただければ幸いです。