我使用的是包含malloc_np.h
的第三方库。从我在互联网上找到的,这意味着代码应该在FreeBSD下编译,尽管只需将include更改为malloc.h
使其在Linux下可编译(Ubuntu 13.10)。
现在我正在为这个库编写一个CMake脚本来生成适当的make文件(包括MSVC 2010的NMake makefile)。
在这种情况下实现可移植性的最佳方法是什么?
我目前的解决方案是测试:
${CMAKE_SYSTEM_NAME} STREQUAL "FreeBSD"
在CMake脚本中。根据结果我发出
add_definitions (-DINCLUDE_MALLOC_H="#include <malloc[_np].h>")
命令并在源文件中使用此宏而不是#include <malloc_np.h>
。
这是一个好习惯吗?
答案 0 :(得分:3)
使用CheckIncludeFile*
个模块:
include(CheckIncludeFileCXX)
check_include_file_cxx("malloc.h" have_malloc)
if(have_malloc)
add_definitions(-DINCLUDE_MALLOC_H)
endif()
使用boost.predef库检测操作系统特定功能