2009-02-12 118 views
6

我想知道如何使可移植构建系统(一步一步),我目前使用cmake,因为它很容易设置在第一个地方,只有一个拱目标,但现在我必须打包我正在开发的库我想知道如何使它成为我正在测试的arch的便携式最佳方式。构建系统和可移植性

我知道我需要一个config.h来定义事情取决于拱,但我不知道如何自动这可以是。

任何其他方式来建立系统是热烈欢迎!

回答

10

你可以使用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文件。用下面的行

#cmakedefine HAVE_ALTERNATIVE_FUNCS 

创建config.h.in,并通过这条线在CMakeLists.txt创建config.h文件(见CONFIGURE_FILE

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

#cmakedefine将被转换为#define#undef取决于CMake的变量。

BTW,测试edianness,看到this mail

2

我一直在使用迄今为止工作良好的GNU autoconf/automake工具链。我只专注于Linux/x86(和64位)和Mac,由于存在endian问题,这对于建立在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

+0

窗口将永远是我的目标,我希望;) – claf 2009-02-12 11:07:00