【问题标题】:Build System and portability构建系统和可移植性
【发布时间】:2010-10-07 03:29:27
【问题描述】:

我想知道如何制作一个可移植的构建系统(逐步),我目前使用 cmake,因为它一开始很容易设置,只有一个拱形目标,但现在我有了打包我正在开发的库我想知道如何使其可移植到我正在测试的arch的最佳方法。

我知道我需要一个 config.h 来根据拱门定义事物,但我不知道这有多自动化。

热烈欢迎任何其他构建系统的方式!

【问题讨论】:

    标签: cmake build-system


    【解决方案1】:

    您可以只使用 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
    

    并通过CMakeLists.txt 中的这一行创建一个config.h 文件(参见CONFIGURE_FILE

    CONFIGURE_FILE(config.h.in config.h @ONLY)
    

    #cmakedefine 将根据 CMake 变量转换为 #define#undef

    顺便说一句,要测试 edianness,请参阅 this mail

    【讨论】:

      【解决方案2】:

      我一直在使用 GNU autoconf/automake 工具链,到目前为止它对我来说效果很好。我只真正关注 Linux/x86(和 64 位)和 Mac,如果你在 PowerPC 上构建,这很重要,因为字节序问题。

      使用 autoconf,您可以使用宏检查主机平台:

      AC_CANONICAL_HOST
      

      并使用以下方法检查字节顺序:

      AC_C_BIGENDIAN
      

      Autoconf 然后会将定义添加到您可以在代码中使用的 config.h。

      我不确定(从未尝试过)GNU 自动工具在 Windows 上的效果如何,因此如果 Windows 是您的目标之一,那么您最好使用现有的 cmake 构建系统找到类似的功能。

      有关自动工具的良好入门,请看这里:

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

      【讨论】:

      • 我希望 Windows 永远不会成为我的目标 ;)
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2010-11-13
      • 1970-01-01
      • 1970-01-01
      • 2019-04-27
      • 1970-01-01
      • 2018-05-30
      • 1970-01-01
      相关资源
      最近更新 更多