gpt4 book ai didi

c++ - 如何让CMake在任何地方自动添加MagickWand库链接

转载 作者:行者123 更新时间:2023-11-30 02:29:50 24 4
gpt4 key购买 nike

我想在我使用 MagickWand 的软件中使用 CMake。

CMake 在我的机器上运行并生成一个有用的 Makefile。在另一台机器上,我必须手动添加

set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -lMagickWand-6.Q16 -lMagickCore-6.Q16")

否则链接器找不到MagickWandGenesis()等函数。

我通过 pkg-config --cflags --libs MagickWand 发现 -l 标志。

CMake 不应该已经使用 TARGET_LINK_LIBRARIES 为我生成链接器标志吗?

我是否遗漏了一些明显的东西,或者为什么这不是在任何地方都有效?


我在 CMakeLists.txt 中有这段代码:

FIND_PACKAGE(ImageMagick
REQUIRED
COMPONENTS MagickWand
)

[...]

set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -DMAGICKCORE_HDRI_ENABLE=0 -DMAGICKCORE_QUANTUM_DEPTH=16")

[...]

INCLUDE_DIRECTORIES(
${Boost_INCLUDE_DIR}
${ImageMagick_INCLUDE_DIRS}
${ImageMagick_MagickWand_INCLUDE_DIRS}
)

[...]

TARGET_LINK_LIBRARIES(application_name
[...]
${Boost_LIBRARIES}
${CURL_LIBRARIES}
${ImageMagick_LIBRARIES}
${ImageMagick_MagickWand_LIBRARY}
)

最后的 ${ImageMagick_MagickWand_LIBRARY} 甚至都不是必需的。

在两台机器 (Debian Jessie) 上使用 Magick 6.8.9.9、CMake 3.0.2。

最佳答案

简短回答:包 ImageMagick 有问题。

正在寻找CMake's sources , REQUIRED 机制通过变量 package-_FOUND 专门处理,独立于所需的组件。

查看包 ImageMagick here , ImageMagick_FOUND 设置如下:

set(ImageMagick_FOUND ${IMAGEMAGICK_FOUND})

但是 IMAGEMAGICK_FOUND 没有在包的任何地方设置,所以调用总是会取消设置 ImageMagick_FOUND,并且它总是被评估为 true (未主动设置为 false),无论组件是否有效找到。

您可以调试包(并提出拉取请求)或检查组件变量:

if(NOT ImageMagick_MagickWand_FOUND)
message(FATAL_ERROR "MagickWand not found")
endif()

我猜你的第二台机器上的测试会失败。


顺便说一下,您应该只使用 ImageMagick_INCLUDE_DIRSImageMagick_LIBRARIES 链接到库(ImageMagick_MagickWand* 变量在这里是多余的)。如果您选择调试包,您还可以声明导入的目标。

关于c++ - 如何让CMake在任何地方自动添加MagickWand库链接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39258673/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com