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