【问题标题】:Linking dependencies for an External Project in CMake在 CMake 中链接外部项目的依赖项
【发布时间】:2014-07-03 18:35:19
【问题描述】:

我的CMakeLists.txt 中有以下代码:

ExternalProject_Add(
    LibSndFile
    URL "http://www.mega-nerd.com/libsndfile/files/libsndfile-1.0.25.tar.gz"
    CONFIGURE_COMMAND ${CMAKE_CURRENT_SOURCE_DIR}/lib/LibSndFile/configure --prefix=<INSTALL_DIR>
    BUILD_COMMAND ${MAKE}
    SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/lib/LibSndFile
    UPDATE_COMMAND ""
    INSTALL_COMMAND ""
    LOG_DOWNLOAD ON
    LOG_CONFIGURE ON
    LOG_BUILD ON
)

一切配置和构建都很好,直到项目准备好链接。因为 LibSndFile 依赖于 flaclibogglibvorbis,它需要链接到它们,但它看不到它们。

我怎样才能使我的外部项目可以链接到我系统上安装的那些依赖项(是否有一些 LINK_LIBRARY 选项我没有看到)?如果我的系统上没有安装它们,我将如何将它们链接到 LibSndFile?

【问题讨论】:

    标签: c linker dependencies cmake


    【解决方案1】:

    所以我发现最安全的方法是使用另一个 ExternalProject_Add 来作为 LibSndFile 的依赖项:

    find_package(FLAC) # test if FLAC is installed on the system
    if(${FLAC_FOUND}) # do something if it is found, maybe tell the user
    else(${FLAC_FOUND}) # FLAC isn't installed on the system and needs to be downloaded
        ExternalProject_Add(
            FLAC
            URL "http://downloads.xiph.org/releases/flac/flac-1.3.0.tar.xz"
            CONFIGURE_COMMAND ${CMAKE_CURRENT_SOURCE_DIR}/lib/flac/configure --prefix=<INSTALL_DIR>
            BUILD_COMMAND ${MAKE}
            SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/lib/flac
            UPDATE_COMMAND ""
            INSTALL_COMMAND ""
            LOG_DOWNLOAD ON
            LOG_CONFIGURE ON
            LOG_BUILD ON
        )
    endif(${FLAC_FOUND})
    

    然后使用 LibSndFile 中的DEPENDS 指令将其指向项目所依赖的目标。

    ExternalProject_Add(
        LibSndFile
        DEPENDS FLAC libogg libvorbis
        URL "http://www.mega-nerd.com/libsndfile/files/libsndfile-1.0.25.tar.gz"
        CONFIGURE_COMMAND ${CMAKE_CURRENT_SOURCE_DIR}/lib/LibSndFile/configure --prefix=<INSTALL_DIR>
        BUILD_COMMAND ${MAKE}
        SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/lib/LibSndFile
        UPDATE_COMMAND ""
        INSTALL_COMMAND ""
        LOG_DOWNLOAD ON
        LOG_CONFIGURE ON
        LOG_BUILD ON
    )
    

    【讨论】:

      【解决方案2】:

      从 libsndfile 运行 configure 后跟 make install(我相信)会生成 sndfile.pc,其中包含您想要链接的信息。

      如何从这个文件中提取库设置?您可以根据documentationExternalProject_Add添加自定义步骤。

      【讨论】:

      • 这并不能真正回答我的问题...我需要这些依赖项才能运行 make 而不会出现任何错误。
      • 您需要在运行 ExternalProject_Add 之前找到这些依赖项并告诉 configure。我假设你知道这一点,你的问题是如何与 libsndfile 使用的库链接。
      • 我将如何告诉 configure 关于它们?
      • 在调用配置脚本之前使用选项进行配置或通过设置 CFLAGS/LDFLAGS 环境变量。
      • 我觉得我应该能够设置一些较低范围的变量来完成我正在寻找的东西。
      猜你喜欢
      • 1970-01-01
      • 2023-04-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-05-10
      • 1970-01-01
      • 2021-02-06
      • 2020-04-28
      相关资源
      最近更新 更多