【问题标题】:What is INSTALL_DIR useful for in ExternalProject_Add command?在 ExternalProject_Add 命令中 INSTALL_DIR 有什么用?
【发布时间】:2015-06-14 12:05:19
【问题描述】:

我不明白在 ExternalProject_Add 命令中 INSTALL_DIR 的用法。我尝试使用它,但它似乎不起作用。下面是一个 CMakeLists.txt 示例,使用了可以快速编译的 Eigen 库:

cmake_minimum_required (VERSION 2.6)
project (example CXX)
include(ExternalProject)
include(ProcessorCount)
set(CMAKE_VERBOSE_MAKEFILE ON)
ProcessorCount(N)
if(NOT N EQUAL 0)
   set(CMAKE_BUILD_FLAGS -j${N})
endif()
ExternalProject_Add
(
    mylib
    PREFIX myprefix
    DOWNLOAD_COMMAND wget http://bitbucket.org/eigen/eigen/get/3.2.4.tar.gz && tar xvzf 3.2.4.tar.gz -C mylib --strip-components=1
)

我选择了以下项目层次结构:

project
    CMakeLists.txt
    build/

从构建存储库中,我输入:

cmake ..
make

安装过程失败并显示以下消息:

文件无法创建目录:/usr/local/include/eigen3.
也许需要管理权限。

据我了解,这意味着我需要在配置步骤中定义一个“前缀”:

cmake -D CMAKE_INSTALL_PREFIX=$INSTALL_DIR ..

但是,INSTALL_DIR 变量已在 ExternalProject_Add 命令中定义。但是,当我通过添加修改 INSTALL_DIR 的值时,我得到了同样的错误

INSTALL_DIR myprefix/src/install

在 ExternalProject_Add 命令中。

那么,INSTALL_DIR 有什么用? 我做错了什么?

当然,我知道如何提供自己的配置命令来添加前缀并解决问题。但这不是我的问题。我的问题是:如果我必须这样做,INSTALL_DIR 的目的是什么?

【问题讨论】:

  • cmake -D CMAKE_INSTALL_PREFIX=$INSTALL_DIR .. 在这里,你从你的 shell 中给它一个环境变量,而不是一个 CMake 变量。
  • 是的,我知道。我只是想说问题出在配置步骤。

标签: cmake external-project


【解决方案1】:

根据我在此讨论中发现的https://www.mail-archive.com/cmake@cmake.org/msg51663.html(滚动到页面末尾以浏览线程消息),使用CMAKE_ARGS -DCMAKE_INSTALL_PREFIX=${CMAKE_BINARY_DIR}/contrib 确实很常见

此外,潜伏在ExternalProject.cmake 模块中,我发现设置此目录的唯一效果是CMake 将在执行任何其他操作之前创建INSTALL_DIR 中指定的目录。

此外,它还将设置您可以通过ExternalProject_Get_Property(${project_name} install_dir) 命令收集的属性。

差不多就是这样。

// 自 CMake 版本 3.2.2 起

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-06-25
    • 2020-05-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-04-14
    • 2020-07-16
    相关资源
    最近更新 更多