什么是INSTALL_DIR在ExternalProject_Add命令中有用?

Ale*_*eph 13 cmake external-project

我不明白在ExternalProject_Add命令中使用INSTALL_DIR.我尝试使用它,但它似乎不起作用.这是一个CMakeLists.txt的示例,使用可快速编译的特征库:

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
)
Run Code Online (Sandbox Code Playgroud)

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

project
    CMakeLists.txt
    build/
Run Code Online (Sandbox Code Playgroud)

从构建存储库,我输入:

cmake ..
make
Run Code Online (Sandbox Code Playgroud)

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

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

据我所知,这意味着我需要在配置步骤中定义"前缀":

cmake -D CMAKE_INSTALL_PREFIX=$INSTALL_DIR ..
Run Code Online (Sandbox Code Playgroud)

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

INSTALL_DIR myprefix/src/install
Run Code Online (Sandbox Code Playgroud)

在ExternalProject_Add命令中.

那么,INSTALL_DIR对什么有用呢?我究竟做错了什么?

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

小智 9

从我在本讨论中发现的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起