6

どうすれば移植可能なビルド システムを作成できるか (ステップ バイ ステップ) を考えています。最初はセットアップが簡単で、アーチ ターゲットが 1 つだけだったので、現在は cmake を使用していますが、今はパッケージ化する必要があります。私が開発しているライブラリ 私がテストしているアーチに移植できるようにする最良の方法は何だろうと思っています。

アーチに応じて物事を定義するためにconfig.hが必要であることは知っていますが、これがどのように自動化されるかはわかりません。

ビルド システムを使用するその他の方法は、大歓迎です。

4

2 に答える 2

10

CMake を使用するだけで、非常に簡単です。

次のものが必要です。

まず、構成の詳細を見つけることを意味します。たとえば、一部の関数が一部のプラットフォームで異なる名前であることがわかっている場合は、次を使用TRY_COMPILEしてそれを発見できます。

TRY_COMPILE(HAVE_ALTERNATIVE_FUNC 
    ${CMAKE_BINARY_DIR}
    ${CMAKE_SOURCE_DIR}/alternative_function_test.cpp
    CMAKE_FLAGS -DINCLUDE_DIRECTORIES=xxx
)

wherealternative_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)

これは、CMake 変数#cmakedefineに変換される#define#undef、CMake 変数に応じて変換されます。

ところで、edianness のテストについては、このメールを参照してください

于 2009-02-12T10:44:59.147 に答える
2

これまでのところ、うまく機能している GNU autoconf/automake ツールチェーンを使用しています。私は Linux/x86 (および 64 ビット) と Mac にのみ焦点を当てています。これは、エンディアンの問題があるため、PowerPC でビルドする場合に重要です。

autoconf を使用すると、マクロでホスト プラットフォームを確認できます。

AC_CANONICAL_HOST

そして、次を使用してエンディアンを確認します。

AC_C_BIGENDIAN

Autoconf は、コードで使用できる config.h に定義を追加します。

GNU autotools が Windows でどの程度うまく機能するかはわかりません (試したことはありません)。したがって、Windows がターゲットの 1 つである場合は、既存の cmake ビルド システムで同様の機能を見つけたほうがよいかもしれません。

autotools の優れた入門書については、こちらをご覧ください。

http://www.freesoftwaremagazine.com/books/autotools_a_guide_to_autoconf_automake_libtool

于 2009-02-12T10:37:08.853 に答える