【问题标题】:cmake dependency between two projects at the same level同一级别的两个项目之间的cmake依赖关系
【发布时间】:2018-03-24 03:06:05
【问题描述】:

在我的 CMake 项目中,我有两个必需的 3rd 方库。 问题是第二个需要先构建第一个。

确切地说,我有以下结构

   -project
      CMakeLists.txt // add_subdirectory(first_lib)
                     // add_subdirectory(second_lib)
      - first_lib
           CMakeLists.txt // ...
      - second_lib
           CMakeLists.txt // ..
                          // contains find_package(first_lib REQUIRED)
                          // ..

此项目无法构建,因为必须先构建并安装第一个库才能使其包可用。

在 CMake 中处理这种情况的最佳方法是什么?

【问题讨论】:

    标签: cmake dependencies


    【解决方案1】:

    您可以使 second_lib 依赖于 first_lib 的目标名称。这将强制 first_lib 首先构建。

    为避免修改second_lib的CMakeLists.txt,您可以使用以下解决方案:

    创建一个自定义 Findfirst_lib.cmake 模块。设置模块内 second_lib 期望的任何与 first_lib 相关的变量。

    set(FIRST_LIB_LIBRARIES first_lib) #use *first_lib* target name here.
    set(FIRST_LIB_INCLUDE_DIRS ${CMAKE_SOURCE_DIR}/first_lib/include)
    

    不要忘记将模块的目录添加到CMAKE_MODULE_PATH。

    此解决方案假定 second_lib 使用由 Findfist_lib 模块在 target_link_libraries、target_include_directories 等中设置的变量。例如:

    target_link_libraries(second_lib ${FIRST_LIB_LIBRARIES})
    

    我还没有找到让它与导入的目标一起工作的方法。

    【讨论】:

    • 嗨 ptrlukar,我找到了答案并发布了它。效果很好。感谢您的帮助。
    【解决方案2】:

    【讨论】:

    • 是的,这肯定是强制构建顺序更简单的方法。但是 find_package(first_lib) 真的会找到任何东西吗? first_lib 未在 second_lib 构建开始之前安装。
    • @ptrlukas 现在很不幸。我刚刚发现在我构建时出现了一个问题,这让我相信我的问题已经解决了。恐怕这个问题仍然悬而未决。
    猜你喜欢
    • 1970-01-01
    • 2015-04-14
    • 1970-01-01
    • 2012-02-22
    • 2017-03-06
    • 2014-10-15
    • 2016-08-14
    • 1970-01-01
    • 2023-03-29
    相关资源
    最近更新 更多