gpt4 book ai didi

c++ - cmake 层次结构 zlib、libpng 和我自己的应用程序

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:46:48 27 4
gpt4 key购买 nike

我正在尝试为使用 libpng 的应用程序创建 CMake 层次结构。 Libpng 需要 zlib。

由于 CMakeLists.txt 与 zlib 和 libpng 一起分发,我的第一个想法是制作以下结构:

/development
CMakeLists.txt
/zlib-1.2.5
CMakeLists.txt <- provided by zlib
-sources-
-build of zlib?-
/libpng154
CMakeLists.txt <- provided by libpng
-sources-
-build of libpng?-
/myapp
CMakeLists.txt
-sources-
/build
-build of myapp-
-build of zlib?-
-build of libpng?-

... 然后,在顶层 CMakeLists.txt 中,放置如下内容:

project(everything)
...
add_subdirectory(zlib-1.2.5)
add_subdirectory(libpng154)
add_subdirectory(myapp)
...

但运气不好。 libpng 的 CMakeLists.txt 执行 find_package(ZLIB...) 但它不知道去哪里找。这可能在 Mac OS 上通过将 zlib“安装”到/usr 来解决。但这在 Windows 中不起作用。

然后我想我不会递归到子目录中。只需独立编译和构建 zlib 和 libpng 并在向下遍历到我自己的应用程序之前执行 find_package(PNG...)(单独编译和构建 zlib 和 libpng(通过提供的 CMakeLists.txt)是有效的,至少在 Mac OS 上是这样,但同样,只是因为 zlib 安装到/usr)。

project(everything)
...
find_package(PNG...)
add_subdirectory(myapp)
...

运气不好,find_package(PNG...) 失败了。我不知道如何让 find_package(PNG...) 知道在哪里寻找我刚刚构建的 libpng 库。例如,对于 boost,您可以设置“BOOST_ROOT”变量。 libpng 有什么类似的东西吗?

亲切的问候,

丹尼尔·德克斯

最佳答案

find png 似乎没有 PNG_ROOT 变量,BOOST_ROOT 就是这种情况。我怀疑 zlib 库就是这种情况。您可以通过查找 find_png 模块和 find_zlib 模块来检查您的模块目录。

我会重写这些模块并将它们添加到您的 cmake 配置目录中。重写后的版本应该是这样的:

# This module defines
# PNG_INCLUDE_DIR, where to find png.h, etc.
# PNG_FOUND, If false, do not try to use PNG.
# also defined, but not for general use are
# PNG_LIBRARY, where to find the PNG library.

FIND_PATH(
PNG_INCLUDE_DIR png.h
PATHS
${PNG_ROOT}
PATH_SUFFIXES
include
include/libpng
NO_DEFAULT_PATH )

FIND_PATH(
PNG_INCLUDE_DIR png.h
PATHS
${PNG_ROOT}
PATH_SUFFIXES
include
include/libpng )

SET(PNG_NAMES ${PNG_NAMES} png libpng png12 libpng12)

FIND_LIBRARY(
PNG_LIBRARY
NAMES
${PNG_NAMES}
PATHS
${PNG_ROOT}
PATH_SUFFIXES
/lib
NO_DEFAULT_PATHS )

FIND_LIBRARY(
PNG_LIBRARY
NAMES
${PNG_NAMES}
PATHS
${PNG_ROOT}
PATH_SUFFIXES
/lib )

# handle the QUIETLY and REQUIRED arguments and set PNG_FOUND to TRUE if
# all listed variables are TRUE
INCLUDE(FindPackageHandleStandardArgs)
FIND_PACKAGE_HANDLE_STANDARD_ARGS(PNG DEFAULT_MSG PNG_LIBRARY PNG_INCLUDE_DIR)

请注意,我添加了两次 find_ 命令。第一次跳过默认目录。第二个不跳过默认目录。如果第一次搜索成功,则不会进行第二次搜索。如果定义了 PNG_INCLUDE_DIR 或 PNG_LIBRARY,第二次搜索将知道第一次搜索成功。

关于c++ - cmake 层次结构 zlib、libpng 和我自己的应用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6874883/

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