有没有办法使外部依赖项依赖于项目的另外两个外部依赖项?
这是我的情况
- 核心依赖于boost_program_options和quetzal
- 格查尔依赖于gdal和boost_filesystem和boost_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 依赖项的方式有问题,但我什至不知道一般方法是否正确。