gpt4 book ai didi

CMake 项目共享依赖

转载 作者:行者123 更新时间:2023-12-04 18:06:57 25 4
gpt4 key购买 nike

我有:

  • 一个共享库X,它是独立的
  • 共享库 Y,使用 X
  • 一个可执行的 Z,它同时使用 X 和 Y

  • 它们都有自己的CMakeLists.txt,可以独立配置和构建。

    但是,我无法使可执行文件 (Z) 的 CMakeLists.txt 工作。

    我的方法是这样的:
    foreach(clib ${OWN_LIBS})
    set(LIBS "${LIBS} ${clib}")
    set(CLIB_DIR "${PROJECT_SOURCE_DIR}/../lib${clib}")
    set(CLIB_BUILD_DIR "${CLIB_DIR}/build")

    add_subdirectory("${CLIB_DIR}" "${CLIB_BUILD_DIR}")
    include_directories("${CLIB_DIR}/incl")
    link_directories("${CLIB_BUILD_DIR}")
    endforeach(clib)

    OWN_LIBS 在项目 Y 中只是“X”,在项目 Z 中是“X Y”。

    这适用于项目 Y,但在项目 Z 中,我得到:

    CMake Error at ... (add_subdirectory): The binary directory

    .../libX/build

    is already used to build a source directory. It cannot be used to build source directory

    .../libX

    Specify a unique binary directory name.



    我还尝试尝试创建一个本地构建目录,例如将有 libY/build/deps-libX/包含配置和构建的库 X(当从 Y 使用时),而 Z 对 X 和 Y 都有这个。
    不幸的是,接下来我遇到了:

    add_library cannot create target "X" because another target with the same name already exists. The existing target is a shared library created in source directory "libX". See documentation for policy CMP0002 for more details.



    使用 ExternalProject 不是一种选择。

    最佳答案

    其他人的补充答案:

    由于合并“错误”,我收到此错误。在一个更大的项目中,合并后,一个 CMakeLists.txt 在同一个子目录上调用了两次“add_subdirectory”。它会导致相同的错误消息。

    关于CMake 项目共享依赖,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24739401/

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