質問
ポータブルなビルドシステムをどのように作成できるか疑問に思っています(ステップバイステップ)。私は現在 cmake を使用しています。これは、アーチターゲットが 1 つだけで最初からセットアップが簡単だったためですが、今ではパッケージ化する必要があります。私が開発しているライブラリを、テスト中の Arch に移植可能にする最善の方法は何かと考えています。
アーチに応じて定義するには config.h が必要であることはわかっていますが、これがどの程度自動的に行われるかはわかりません。
他の方法でビルド システムを構築することも大歓迎です。
解決
CMake を使用するだけで、非常に簡単です。
次のものが必要です。
まず、構成の詳細を確認することを意味します。たとえば、ある関数の名前がプラットフォームによって異なることがわかっている場合、次のように使用できます。 TRY_COMPILE
それを発見するには:
TRY_COMPILE(HAVE_ALTERNATIVE_FUNC
${CMAKE_BINARY_DIR}
${CMAKE_SOURCE_DIR}/alternative_function_test.cpp
CMAKE_FLAGS -DINCLUDE_DIRECTORIES=xxx
)
どこ alternative_function_test.cpp
は、代替定義でのみコンパイルされるソース ディレクトリ内のファイルです。
これにより変数が定義されます HAVE_ALTERNATIVE_FUNC
コンパイルが成功した場合。
次に、この定義がソースに影響を与えるようにする必要があります。コンパイルフラグに追加することもできます
IF(HAVE_TR1_RANDOM)
ADD_DEFINITIONS(-DHAVE_TR1_RANDOM)
ENDIF(HAVE_TR1_RANDOM)
または、 config.h
ファイル。作成する config.h.in
次の行で
#cmakedefine HAVE_ALTERNATIVE_FUNCS
そして、 config.h
ファイルのこの行まで CMakeLists.txt
(見る CONFIGURE_FILE
)
CONFIGURE_FILE(config.h.in config.h @ONLY)
の #cmakedefine
に翻訳されます #define
または #undef
CMake 変数に応じて異なります。
ところで、エディアンネスのテストについては、次を参照してください。 このメール
他のヒント
私は今のところ、私のためによく働いているGNU autoconfの/ automakeのツールチェーンを使用してきました。私は本当にあなたが問題をエンディアンに起因するのPowerPC上で構築する場合に重要であるのLinux / x86の(および64ビット)とMac、に焦点を当てています。
のautoconfを使用すると、マクロでホストプラットフォームを確認することができます:
AC_CANONICAL_HOST
と使用エンディアンを確認します:
AC_C_BIGENDIAN
Autoconfが、その後、あなたのコード内で使用できるconfig.hのために定義を追加します。
私は確かではない午前には、GNUのautotoolsのは、Windows上で動作するので、Windowsは、あなたの目標の一つであるならば、あなたは、既存のcmakeのビルドシステムと同様の機能を発見したほうが良いかもしれどれだけ(試したことがありません)。
のautotoolsの良いプライマーのために、持っているこちらをご覧ます:
http://www.freesoftwaremagazine.com/books/autotools_a_guide_to_autoconf_automake_libtool