gpt4 book ai didi

c++ - 使用 CMake ExternalProject 的目标名称以实现跨平台库依赖

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:43:45 36 4
gpt4 key购买 nike

我正在尝试创建一个 CMakeLists,它会自动下载和编译一个库,并将它链接到 Windows 和 Linux 上的另一个项目。为此,我使用了 ExternalProject_Add。下载和编译部分很好,但是,在 Windows 上,创建的库称为 zlibd.lib,而在 Linux 上,它称为 zlib.a

这是我的代码:

if (NOT Zlib_FOUND)
message(STATUS "Zlib has not been found. Therefore it will automatically be downloaded during the compilation process.")
ExternalProject_Add(Zlib
SOURCE_DIR "${PROJECT_BINARY_DIR}/deps/zlib"
BINARY_DIR "${PROJECT_BINARY_DIR}/deps/zlib-build"
INSTALL_DIR "${PROJECT_BINARY_DIR}/deps/zlib-install"
GIT_REPOSITORY "${git_protocol}://github.com/madler/zlib.git"
GIT_TAG "50893291621658f355bc5b4d450a8d06a563053d"
CMAKE_ARGS
-DCMAKE_INSTALL_PREFIX:PATH=<INSTALL_DIR>
-DINSTALL_BIN_DIR:PATH=<INSTALL_DIR>/bin
-DINSTALL_INC_DIR:PATH=<INSTALL_DIR>/include
-DINSTALL_LIB_DIR:PATH=<INSTALL_DIR>/lib
-DINSTALL_MAN_DIR:PATH=<INSTALL_DIR>/share/man
-DINSTALL_PKGCONFIG_DIR:PATH=<INSTALL_DIR>/share/pkgconfig)
ExternalProject_Get_Property(Zlib install_dir)
set(ZLIB_LIB_DIR ${install_dir}/lib)
set(ZLIB_INC_DIR ${install_dir}/include)
set(ZLIB_BIN_DIR ${install_dir}/bin)

add_library(zlib STATIC IMPORTED)
set_target_properties(zlib PROPERTIES IMPORTED_LOCATION ${ZLIB_LIB_DIR}/zlibd.lib)

endif()

然而,这里我硬编码了windows的库名,所以当我想在Linux上编译它时,找不到库。

我怎样才能让它根据平台找到正确的库名称(如果可能而不对它们进行硬编码)?

谢谢。

编辑:是否可以从 ExternalProject 获取目标? (使用 getproperty 或类似的东西?)或者最终以另一种方式进行,强制 ExternalProject 输出具有给定名称的目标?

最佳答案

为此,您通常会使用 find_library :

find_library(ZLIB_LIBRARY NAMES foo PATHS ${ZLIB_LIB_DIR})
add_library(zlib STATIC IMPORTED)
set_target_properties(zlib PROPERTIES IMPORTED_LOCATION "${ZLIB_LIBRARY}")

这样,它将在 Linux 上查找 libzlib.a,在 Windows 上查找 zlib.lib

但是,您的库的名称似乎非常具体并且没有遵循明显的命名方案,这使得 CMake 很难自动找到库(无需硬编码名称)。

您可能感兴趣的另一个选项是将 ExternalProject_Add 与 CMake 管理依赖项的能力相结合,如 this project 中所做的那样。并在 this blog article 中描述.如果您采用这种方法,您可以只使用在您导入的项目的 CMakeLists.txt 中定义的 zlib 目标。

关于c++ - 使用 CMake ExternalProject 的目标名称以实现跨平台库依赖,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43666669/

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