构建系统和可移植性

cla*_*laf 6 cmake build-system

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

我知道我需要一个config.h来定义取决于arch的东西,但我不知道它是多么自动化.

任何其他方式有一个构建系统是热烈欢迎!

jpa*_*cek 10

你可以使用CMake,它非常简单.

你需要这些东西:

首先,意味着找出配置细节.例如,如果您知道某些功能在某些平台上的命名方式不同,您可以使用它TRY_COMPILE来发现:

TRY_COMPILE(HAVE_ALTERNATIVE_FUNC 
    ${CMAKE_BINARY_DIR}
    ${CMAKE_SOURCE_DIR}/alternative_function_test.cpp
    CMAKE_FLAGS -DINCLUDE_DIRECTORIES=xxx
)
Run Code Online (Sandbox Code Playgroud)

alternative_function_test.cpp源目录中的文件位于哪里,仅使用备用定义进行编译.

HAVE_ALTERNATIVE_FUNC如果编译成功,这将定义变量.

其次,您需要使此定义影响您的来源.您可以将其添加到编译标志

IF(HAVE_TR1_RANDOM)
    ADD_DEFINITIONS(-DHAVE_TR1_RANDOM)
ENDIF(HAVE_TR1_RANDOM)
Run Code Online (Sandbox Code Playgroud)

或者你可以制作一个config.h文件.config.h.in使用以下行创建

#cmakedefine HAVE_ALTERNATIVE_FUNCS
Run Code Online (Sandbox Code Playgroud)

并在此处创建一个config.h文件CMakeLists.txt(参见参考资料CONFIGURE_FILE)

CONFIGURE_FILE(config.h.in config.h @ONLY)
Run Code Online (Sandbox Code Playgroud)

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

BTW,测试edianness,请看这封邮件