2017-04-26 73 views
0

我正在开发使用ImageMagick的一个C/C++库(使用/同时支持libMagickCorelibMagick++),用于读取和写入的图像数据(未处理)。检测GraphicsMagick工具或ImageMagick的标头是否包括

现在,我还想支持IM的GraphicsMagick fork(例如使用Debian的graphicsmagick-libmagick-dev-compat包)。

不幸的是,这些API有足够的分歧,因此我不能使用其中一个作为另一个的直接替换。由于它们仍然非常相似,因此我打算使用多个#ifdef作为API特定部件。

现在我的问题是,通过包含通用头文件(这两个变体称为相同)之后,通过预处理器指令检测哪个API实际使用似乎相当复杂。

基本上,我正在寻找类似#define(由IM/GM标头提供)的东西,它可以用来区分两个API。喜欢的东西:

#include <Magick++.h> 
#ifdef GRAPHICSMAGIC_DEFINE 
// GM-specific code 
#else 
// IM-specific code 
#endif 

,或者对C-API:

#include <magick/MagickCore.h> 
#ifdef GRAPHICSMAGIC_DEFINE2 
/* GM-specific code */ 
#else 
/* IM-specific code */ 
#endif 

想法?

回答

1

AutoconfCMake

真的 - 没有简单的解决方法,但是您需要将解决方案打包并询问系统存在什么库,然后生成带有正确预处理器定义的config.h

GraphicsMagick工具& ImageMagick的之间的区别似乎很简单做的很漂亮,但现在我们每年投入IM 7的发布,我们现在需要检查哪些版本需要&调整定义。例如

// IM 6 
#include <magick/MagickCore.h> 
// IM 7 
#include <MagickCore/MagickCore.h> 

我建议审查其他项目可在网上使用existing m4 scripts

所以回到原来的问题,一般包括标题我是这个样子......(我从Imagick library引用,但可以扩展到覆盖GM)

#if defined (IM_MAGICKWAND_HEADER_STYLE_SEVEN) 
# include <MagickWand/MagickWand.h> 
#elif defined (IM_MAGICKWAND_HEADER_STYLE_OLD) 
# include <wand/magick-wand.h> 
#else 
# include <wand/MagickWand.h> 
#endif