【问题标题】:Add a subproject by CMake通过 CMake 添加子项目
【发布时间】:2020-05-11 20:08:10
【问题描述】:

Apache Arrow 子模块存储在thirdparty/apache_arrow/cpp,所以我的主 CMakeLists.txt 看起来像

cmake_minimum_required(VERSION 3.0.0)
project(arrow_parcer VERSION 0.1.0)

add_subdirectory(src)
add_subdirectory(thirdparty/apache_arrow/cpp)

thirdparty/apache_arrow 存储整个Apache Arrow 项目。

当我尝试构建项目时,最后的输出行如下:

[cmake] CMake Error: INSTALL(EXPORT) given unknown export "arrow_targets"
[cmake] Generating done
[cms-driver] Error during CMake configure: [cmake-server] Failed to compute build system.

Apache Arrow 可以通过 CMakeLists.txt 在/cpp 文件夹中轻松构建,但是如果我尝试将它包含在add_subdirectory 中,为什么会出现错误?

【问题讨论】:

  • 那个“arrow_targets”是从哪里来的?
  • 是的,这是问题的一部分。整个apache_arrow 文件夹中没有"arrow_targets" 的匹配项。一个都没有。
  • 并非每个项目都打算通过add_subdirectory 方法构建。您是否尝试过将 ApacheArrow 项目构建为独立,将其cpp/ 子目录作为源目录提供给cmake
  • 是的,我试过了,我能够构建它。

标签: c++ cmake apache-arrow


【解决方案1】:

Apache Arrow C++ 并不是要使用 add_subdirectory 来构建,而是应该使用 CMake 的 ExternalProject_Add facility 来构建它:

ExternalProject_Add(arrow_ep 
    URL "https://www.apache.org/dist/arrow/arrow-0.15.1/apache-arrow-0.15.1.tar.gz"
    SOURCE_SUBDIR cpp)

除了使用URL,您还可以使用不同的提供程序,例如GIT_REPOSITORY

【讨论】:

  • 有没有办法确定给定的 CMake 项目是否打算/能够被add_subdirectory() 使用,或者它是否需要完整的ExternalProject_Add() 处理?
  • 我正在尝试在我的 C++ 项目中使用 Apache Arrow 数据类型,正如我在您的官方网站上的 C++ 实现文档中看到的那样,我需要包含标题 。尽管我以与您在回答中提到的相同方式将 Apache Arrow 添加到我的项目中,但我仍然收到错误 arrow/api.h not found。我在这里错过了什么吗?
  • 您还需要添加一个include_directories 指令,该指令指向构建工件所在的目录。看看我们如何在 Arrow 中为 snappy 做到这一点:github.com/apache/arrow/blob/master/cpp/cmake_modules/… 除了ExternalProject_Add 之外,还需要类似的行。
  • @genpfault 我认为确定的“方法”是: 1. 如果这个项目对你的主项目真的很重要; 2. 如果您有足够的时间和耐心阅读外部项目的 CMake 和整个构建系统。如果您允许有一些技巧和解决方法,您可以使用add_subdirectory 使用任何项目。
【解决方案2】:

如果您真的不需要设置安装,这里有一个 hack-y 方法来做到这一点。在CMakeLists.txt 添加箭头的源目录中,您定义自己的install

function(install)
endfunction()
add_subdirectory(${arrow_SOURCE_DIR}/cpp ${arrow_BINARY_DIR})

【讨论】:

    猜你喜欢
    • 2017-11-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-02-14
    • 1970-01-01
    • 2014-11-17
    • 2019-07-02
    相关资源
    最近更新 更多