【问题标题】:CMake compile options for libpnglibpng 的 CMake 编译选项
【发布时间】:2015-09-07 22:19:21
【问题描述】:

我在我的项目中使用 libpng。现在,我可以编译我的项目: g++ *.cpp `libpng-config --ldflags`

我想切换到使用 CMake 以便于重新编译,但我不知道如何处理 libpng 部分。如何在 CMake 中提供 `libpng-config --ldflags`?

【问题讨论】:

    标签: cmake


    【解决方案1】:

    我终于用find_package 解决了这个问题。感谢this 博文。

    find_package(PNG REQUIRED)
    include_directories(${PNG_INCLUDE_DIR})
    target_link_libraries(${MY_EXEC} ${PNG_LIBRARY})
    

    【讨论】:

    • 好的,记住libpng版本有很多:libpng、libpng12、libpng14、libpng15、libpng16
    • 这暂时适用于我。我会在需要时尝试您的解决方案,感谢您的提醒。
    • 是的,这是 CMake 的做法,+1。但话又说回来,这是对“如何在我的 CMake 项目中使用 libpng?”这个问题的回答,这在技术上 不是 您所问的。所以最初的问题显然是一个 X-Y 问题。我已经对其进行了编辑以更好地反映真实意图。
    • 类似地它也适用于 TIFF。
    【解决方案2】:

    我认为推荐和便携的方式应该使用 pkg-config 来完成,如下所示:

    # search for pkg-config
    include (FindPkgConfig)
    if (NOT PKG_CONFIG_FOUND)
        message (FATAL_ERROR "pkg-config not found")
    endif ()
    
    # check for libpng
    pkg_check_modules (LIBPNG libpng16 REQUIRED)
    if (NOT LIBPNG_FOUND)
        message(FATAL_ERROR "You don't seem to have libpng16 development libraries installed")
    else ()
        include_directories (${LIBPNG_INCLUDE_DIRS})
        link_directories (${LIBPNG_LIBRARY_DIRS})
        link_libraries (${LIBPNG_LIBRARIES})
    endif ()
    add_executable (app_png ${_MYSOURCES} ${LIBPNG_LINK_FLAGS})
    

    【讨论】:

    • +1。这是更合适的解决方案。如果主机同时具有 libpng 和 libpng16 并且应用程序依赖于 libpng16,则非 pkg-config 解决方案将失败。
    • 这非常适合我。我不知道为什么人们不标记解决方案。
    猜你喜欢
    • 1970-01-01
    • 2017-11-01
    • 2019-08-26
    • 2017-10-12
    • 1970-01-01
    • 2021-08-02
    相关资源
    最近更新 更多