我正在尝试使用我的apache-arrow文件中的以下部分构建并链接到v9.0.0项目中的cmake项目。
ExternalProject_Add(arrow
URL "https://www.apache.org/dist/arrow/arrow-9.0.0/apache-arrow-9.0.0.tar.gz"
SOURCE_SUBDIR cpp)
message(STATUS "arrow source dir: ${arrow_SOURCE_DIR}")
include_directories(${arrow_SOURCE_DIR}/cpp/src)编译会抱怨缺少apache-arrow头。
fatal error: 'arrow/array.h' file not found
#include <arrow/array.h>
^~~~~~~~~~~~~~~
1 error generated.受message(STATUS "arrow source dir: ${arrow_SOURCE_DIR}")输出为空的事实所支持
-- arrow source dir: 另一个与cmake报告的cmake安装有关的错误是:
CMake Error at cmake_modules/ThirdpartyToolchain.cmake:267 (find_package):
Could not find a configuration file for package "xsimd" that is compatible
with requested version "8.1.0".
The following configuration files were considered but not accepted:
/opt/homebrew/lib/cmake/xsimd/xsimdConfig.cmake, version: 9.0.1
Call Stack (most recent call first):
cmake_modules/ThirdpartyToolchain.cmake:2245 (resolve_dependency)
CMakeLists.txt:575 (include)当然,在外部安装apache-arrow并使用brew install apache-arrow和find_package的传统方法工作得很好,但我想要的是更跨平台的东西。其中一个箭头开发者提供了一个链接,说明如何将include_directories与ExternalProject_Add一起正确地用于先前的问题,但我想这个示例现在已经过时了。
使用apache-arrow安装并链接到cmake项目中的ExternalProject_Add的推荐方法是什么?
编辑:最小示例
CMakeLists.txt
cmake_minimum_required(VERSION 3.24)
project(arrow_cmake)
set(CMAKE_CXX_STANDARD 23)
include(ExternalProject)
ExternalProject_Add(Arrow
URL "https://www.apache.org/dist/arrow/arrow-9.0.0/apache-arrow-9.0.0.tar.gz"
SOURCE_SUBDIR cpp
CMAKE_ARGS "-Dxsimd_SOURCE=BUNDLED"
)
add_executable(${PROJECT_NAME} main.cpp)
target_link_libraries(${PROJECT_NAME} arrow_shared)main.cpp
#include <iostream>
#include <arrow/array.h> // not found!
int main() {
std::cout << "Hello, World!" << std::endl;
return 0;
}发布于 2022-10-04 13:45:23
在cmake中从源代码构建箭头花费了相当多的精力。它受到此链接的严重影响。
cmake/arrow.cmake
# Build the Arrow C++ libraries.
function(build_arrow)
set(one_value_args)
set(multi_value_args)
cmake_parse_arguments(ARG
"${options}"
"${one_value_args}"
"${multi_value_args}"
${ARGN})
if (ARG_UNPARSED_ARGUMENTS)
message(SEND_ERROR "Error: unrecognized arguments: ${ARG_UNPARSED_ARGUMENTS}")
endif ()
# If Arrow needs to be built, the default location will be within the build tree.
set(ARROW_PREFIX "${CMAKE_CURRENT_BINARY_DIR}/arrow_ep-prefix")
set(ARROW_SHARED_LIBRARY_DIR "${ARROW_PREFIX}/lib")
set(ARROW_SHARED_LIB_FILENAME
"${CMAKE_SHARED_LIBRARY_PREFIX}arrow${CMAKE_SHARED_LIBRARY_SUFFIX}")
set(ARROW_SHARED_LIB "${ARROW_SHARED_LIBRARY_DIR}/${ARROW_SHARED_LIB_FILENAME}")
set(PARQUET_SHARED_LIB_FILENAME
"${CMAKE_SHARED_LIBRARY_PREFIX}parquet${CMAKE_SHARED_LIBRARY_SUFFIX}")
set(PARQUET_SHARED_LIB "${ARROW_SHARED_LIBRARY_DIR}/${PARQUET_SHARED_LIB_FILENAME}")
set(ARROW_BINARY_DIR "${CMAKE_CURRENT_BINARY_DIR}/arrow_ep-build")
set(ARROW_CMAKE_ARGS "-DCMAKE_INSTALL_PREFIX=${ARROW_PREFIX}"
"-DCMAKE_INSTALL_LIBDIR=lib" "-Dxsimd_SOURCE=BUNDLED"
"-DARROW_BUILD_STATIC=OFF" "-DARROW_PARQUET=ON"
"-DARROW_WITH_UTF8PROC=OFF" "-DARROW_WITH_RE2=OFF"
"-DARROW_FILESYSTEM=ON" "-DARROW_CSV=ON" "-DARROW_PYTHON=ON")
set(ARROW_INCLUDE_DIR "${ARROW_PREFIX}/include")
set(ARROW_BUILD_BYPRODUCTS "${ARROW_SHARED_LIB}" "${PARQUET_SHARED_LIB}")
include(ExternalProject)
externalproject_add(arrow_ep
URL https://github.com/apache/arrow/archive/refs/tags/apache-arrow-9.0.0.tar.gz
SOURCE_SUBDIR cpp
BINARY_DIR "${ARROW_BINARY_DIR}"
CMAKE_ARGS "${ARROW_CMAKE_ARGS}"
BUILD_BYPRODUCTS "${ARROW_BUILD_BYPRODUCTS}")
set(ARROW_LIBRARY_TARGET arrow_shared)
set(PARQUET_LIBRARY_TARGET parquet_shared)
file(MAKE_DIRECTORY "${ARROW_INCLUDE_DIR}")
add_library(${ARROW_LIBRARY_TARGET} SHARED IMPORTED)
add_library(${PARQUET_LIBRARY_TARGET} SHARED IMPORTED)
set_target_properties(${ARROW_LIBRARY_TARGET}
PROPERTIES INTERFACE_INCLUDE_DIRECTORIES ${ARROW_INCLUDE_DIR}
IMPORTED_LOCATION ${ARROW_SHARED_LIB})
set_target_properties(${PARQUET_LIBRARY_TARGET}
PROPERTIES INTERFACE_INCLUDE_DIRECTORIES ${ARROW_INCLUDE_DIR}
IMPORTED_LOCATION ${PARQUET_SHARED_LIB})
add_dependencies(${ARROW_LIBRARY_TARGET} arrow_ep)
endfunction()在您的CMakeLists.txt文件中使用它作为
...
set(CMAKE_MODULE_PATH ${CMAKE_CURRENT_SOURCE_DIR}/cmake)
include(arrow)
build_arrow()发布于 2022-10-03 14:33:37
你能试着强迫Arrow构建系统下载并使用捆绑的xsimd吗?我已经能够复制并且能够在当地建造。
ExternalProject_Add(Arrow
URL "https://www.apache.org/dist/arrow/arrow-9.0.0/apache-arrow-9.0.0.tar.gz"
SOURCE_SUBDIR cpp
CMAKE_ARGS "-Dxsimd_SOURCE=BUNDLED"
)我认为我们目前还没有它的文档,我们假设在文档中使用find_package:system.html。也许我们可以打开一张票来改进文档,以便将它与CMake的ExternalProject或FetchContent一起使用。
https://stackoverflow.com/questions/73935448
复制相似问题