在更现代的 cmake 中使用箭头镶木地板的最佳方法是什么?

What is the best way of using arrow parquet in more modern cmake?

以下是对我有用的解决方案,但不确定这是否是执行此操作的最佳方法。我用 brew 来安装它。不幸的是,vcpkg 目前不起作用。我不喜欢这个解决方案的地方是我需要分别设置 Parquet_DIRfind_package(Parquet)

set(Parquet_DIR /usr/local/lib/cmake/arrow)

find_package(Arrow CONFIG REQUIRED)
find_package(Parquet CONFIG REQUIRED)
target_link_libraries(database PRIVATE arrow_shared parquet_shared)

您可以通过PATHS搜索到find_package

您可能还想通过传递 NO_DEFAULT_PATH 来防止在其他地方搜索。

find_package documentation

find_package(Arrow CONFIG REQUIRED)
find_package(Parquet CONFIG REQUIRED
    PATHS /usr/local/lib/cmake/arrow
    NO_DEFAULT_PATH
)
target_link_libraries(database PRIVATE arrow_shared parquet_shared)

(以上代码片段假定 Arrow 不依赖于 Parquet 包。)

作为 fabian 的解决方法,您可以使用 find_package(Parquet CONFIG REQUIRED PATHS ${Arrow_DIR} NO_DEFAULT_PATH) 来避免绝对路径,这样更灵活。

我设法只构建了 parquet 而没有使用 find_packageExternalProject_Add。这是我的 CMakeLists.txt:

# FetchContent and populate...
# Setting your CMake flags...
set(ARROW_SIMD_LEVEL "NONE" CACHE STRING "" FORCE)
set(ARROW_OPTIONAL_INSTALL OFF)
set(Thrift_SOURCE "BUNDLED")
set(BOOST_SOURCE "BUNDLED")
set(ARROW_BUILD_TESTS OFF)
set(ARROW_PARQUET ON)
set(PARQUET_MINIMAL_DEPENDENCY OFF)
include(CMakePackageConfigHelpers)
function(install)
endfunction()
add_subdirectory(${arrow_SOURCE_DIR}/cpp ${arrow_BINARY_DIR})
add_dependencies(parquet_objlib thrift_ep boost_ep) # Had to add this line. Not sure why the proper dependencies are not there.