如何在编译期间确定MAGICKCORE_QUANTUM_DEPTH和MAGICKCORE_HDRI_ENABLE?

时间:2016-07-23 20:35:30

标签: cmake imagemagick magick++

我有一个与ImageMagick 6接口的库。在编译期间,我得到以下编译警告(由我提升为错误)。

我知道使用-DMAGICKCORE_QUANTUM_DEPTH=16 -DMAGICKCORE_HDRI_ENABLE=0在编译期间显式定义这些值将解决问题(在我的特定安装上),但是,因为我正在编写我的CMake配置文件,因为我可以将它们编写为便携式,这种感觉很脆弱,我真的希望有更好的方法。

这让我回到了我的问题:有没有办法确定MAGICKCORE_HDRI_ENABLE和MAGICKCORE_QUANTUM_DEPTH使用cmake,bash或类似我正在链接的库的特定版本?

/usr/include/ImageMagick-6/magick/magick-config.h:29:3: error: #warning "you should set MAGICKCORE_QUANTUM_DEPTH to sensible default set it to configure time default" [-Werror=cpp]
 # warning "you should set MAGICKCORE_QUANTUM_DEPTH to sensible default set it to configure time default"
   ^
/usr/include/ImageMagick-6/magick/magick-config.h:30:3: error: #warning "this is an obsolete behavior please fix your makefile" [-Werror=cpp]
 # warning "this is an obsolete behavior please fix your makefile"
   ^
/usr/include/ImageMagick-6/magick/magick-config.h:52:3: error: #warning "you should set MAGICKCORE_HDRI_ENABLE to sensible default set it to configure time default" [-Werror=cpp]
 # warning "you should set MAGICKCORE_HDRI_ENABLE to sensible default set it to configure time default"
   ^
/usr/include/ImageMagick-6/magick/magick-config.h:53:3: error: #warning "this is an obsolete behavior please fix yours makefile" [-Werror=cpp]
 # warning "this is an obsolete behavior please fix yours makefile"
   ^
cc1plus: all warnings being treated as errors

1 个答案:

答案 0 :(得分:1)

在写这个问题时,我遇到了一个答案。我将在这里总结一下,关于这个角度的其他问题略有不同。

Imagemagick在我的安装(Ubuntu 16.04)上附带了一个名为Magick++-config的实用程序。我在/usr/lib/x86_64-linux-gnu/ImageMagick-6.8.9/bin-Q16/Magick++-config下找到了这个实用程序。下面是我最终用来提取相关构建选项的cmake代码。

find_package(ImageMagick 6.7 COMPONENTS Magick++ MagickCore)
if(ImageMagick_FOUND)
    # Find Imagemagick Library directory
    get_filename_component(MAGICK_LIB_DIR ${ImageMagick_MagickCore_LIBRARY} DIRECTORY)
    # Find where Magick++-config lives
    file(GLOB_RECURSE MAGICK_CONFIG FOLLOW_SYMLINKS ${MAGICK_LIB_DIR}/Magick++-config)
    # Ask about CXX and lib flags/locations
    set(MAGICK_CONFIG ${MAGICK_CONFIG} CACHE string "Path to Magick++-config utility")
    execute_process(COMMAND "${MAGICK_CONFIG}" "--cxxflags" OUTPUT_VARIABLE MAGICK_CXX_FLAGS)
    execute_process(COMMAND "${MAGICK_CONFIG}" "--libs" OUTPUT_VARIABLE MAGICK_LD_FLAGS)
    # Add these to cache
    set(MAGICK_CXX_FLAGS "${MAGICK_CXX_FLAGS}" CACHE string "ImageMagick configuration specific compilation flags." )
    set(MAGICK_LD_FLAGS  "${MAGICK_LD_FLAGS}" CACHE string "ImageMagick configuration specific linking flags.")
    # Split into list:
    string(REGEX MATCHALL "([^\ ]+)" MAGICK_CXX_FLAGS "${MAGICK_CXX_FLAGS}")
    string(REGEX MATCHALL "([^\ ]+)" MAGICK_LD_FLAGS "${MAGICK_LD_FLAGS}")
    # Remove trailing whitespace (CMAKE warns about this)
    string(STRIP "${MAGICK_CXX_FLAGS}" MAGICK_CXX_FLAGS)
    string(STRIP "${MAGICK_LD_FLAGS}" MAGICK_LD_FLAGS)

    target_compile_options(<project> ${MAGICK_CXX_FLAGS})
    target_link_libraries(<project> ${MAGICK_LD_FLAGS})

endif(ImageMagick_FOUND)

Source