在更现代的 cmake 中使用箭头镶木地板的最佳方法是什么?
What is the best way of using arrow parquet in more modern cmake?
以下是对我有用的解决方案,但不确定这是否是执行此操作的最佳方法。我用 brew 来安装它。不幸的是,vcpkg 目前不起作用。我不喜欢这个解决方案的地方是我需要分别设置 Parquet_DIR
和 find_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(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_package
或 ExternalProject_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.
以下是对我有用的解决方案,但不确定这是否是执行此操作的最佳方法。我用 brew 来安装它。不幸的是,vcpkg 目前不起作用。我不喜欢这个解决方案的地方是我需要分别设置 Parquet_DIR
和 find_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(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_package
或 ExternalProject_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.