我想知道如何制作一个可移植的构建系统(一步一步),我目前使用 cmake,因为它一开始很容易设置,只有一个拱目标,但现在我必须打包我正在开发的库我想知道如何使其可移植到我正在测试的拱门的最佳方式。
我知道我需要一个 config.h 来根据拱门定义事物,但我不知道这有多自动化。
任何其他拥有构建系统的方式都受到热烈欢迎!
我想知道如何制作一个可移植的构建系统(一步一步),我目前使用 cmake,因为它一开始很容易设置,只有一个拱目标,但现在我必须打包我正在开发的库我想知道如何使其可移植到我正在测试的拱门的最佳方式。
我知道我需要一个 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
)
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)
将#cmakedefine
被转换为#define
或#undef
取决于 CMake 变量。
顺便说一句,要测试 edianness,请参阅此邮件
我一直在使用 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