0

有没有办法使外部依赖项依赖于项目的另外两个外部依赖项?

这是我的情况

  • 核心依赖于boost_program_optionsquetzal
  • 格查尔依赖于gdalboost_filesystemboost_unit_test_framework

如何编排这些依赖关系?我一直在尝试以下方法:

CMakelist.txt包含:

list(APPEND BOOST_COMPONENTS_REQUIRED program_options)
add_subdirectory(external/upstream)
    ExternalProject_Add(
      ${PROJECT_NAME}_core
      DEPENDS
        boost_external
        gdal_external
        quetzal_external
      SOURCE_DIR
        ${CMAKE_CURRENT_LIST_DIR}/FTD_core
      CMAKE_ARGS
        -DCMAKE_INSTALL_PREFIX=${STAGED_INSTALL_PREFIX}
        -DCMAKE_CXX_COMPILER=${CMAKE_CXX_COMPILER}
        -DCMAKE_CXX_STANDARD=${CMAKE_CXX_STANDARD}
        -DCMAKE_CXX_EXTENSIONS=${CMAKE_CXX_EXTENSIONS}
        -DCMAKE_CXX_STANDARD_REQUIRED=${CMAKE_CXX_STANDARD_REQUIRED}
      CMAKE_CACHE_ARGS
        -DCMAKE_CXX_FLAGS:STRING=${CMAKE_CXX_FLAGS}
        -DCMAKE_LIBRARY_PATH:PATH=${STAGED_INSTALL_PREFIX}
        # Forward externals to the core project
        -DCMAKE_INCLUDE_PATH:PATH=${BOOST_INCLUDEDIR}
        -DCMAKE_LIBRARY_PATH:PATH=${BOOST_LIBRARYDIR}
        -DCMAKE_INCLUDE_PATH:PATH=${GDAL_INCLUDE_DIR}
        -DCMAKE_LIBRARY_PATH:PATH=${GDAL_LIBRARY}
        -DCMAKE_INCLUDE_PATH:PATH=${QUETZAL_INCLUDE_DIR}
      BUILD_ALWAYS
        1
      INSTALL_COMMAND
        ""
      )

external/upstream/quetzal/CMakeLists.txt包含:

list(APPEND BOOST_COMPONENTS_REQUIRED unit_test_framework filesystem)
      include(ExternalProject)
      ExternalProject_Add(quetzal_external
        DEPENDS
          boost_external
          gdal_external
        GIT_REPOSITORY https://github.com/Becheler/quetzal.git
        GIT_TAG        master
        CMAKE_ARGS
          -DCMAKE_LIBRARY_PATH:PATH=${STAGED_INSTALL_PREFIX}
          -DCMAKE_INCLUDE_PATH:PATH=${BOOST_INCLUDEDIR}
          -DCMAKE_LIBRARY_PATH:PATH=${BOOST_LIBRARYDIR}
          -DCMAKE_INCLUDE_PATH:PATH=${GDAL_INCLUDE_DIR}
          -DCMAKE_LIBRARY_PATH:PATH=${GDAL_LIBRARY}
              -DCMAKE_INSTALL_PREFIX=${CMAKE_CURRENT_BINARY_DIR}
              -DCMAKE_PREFIX_PATH=${CMAKE_CURRENT_BINARY_DIR}
              -DBUILD_TESTS=Off
          UPDATE_COMMAND ""
        )

external/upstream/boost/CMakeLists.txt并且external/upstream/gdal/CMakeLists.txt似乎表现得很好。但是由于某种原因external/upstream/quetzal/CMakeLists.txt 找到了系统boost安装(1.71),当我希望它找到本地构建的boost安装(1.65)时。

我认为我将 boost 依赖项转发到 quetzal 依赖项的方式有问题,但我什至不知道一般方法是否正确。

4

0 回答 0