CMake:GLFW作为ExternalProject

时间:2015-02-03 04:12:34

标签: c++ visual-c++ cmake glfw external-project

问题

我正在尝试制作一个使用GLFW的项目。对于这个项目,我使用CMake作为构建系统。我想这样做,因此用户只需要使用CMake构建我的项目,并且作为流程的一部分,GLFW将被适当地构建和链接。

为此,我在我的CMake文件中将GLFW添加为ExternalProject

EXTERNALPROJECT_ADD(glfw
    GIT_REPOSITORY https://github.com/glfw/glfw.git
    GIT_TAG 3.1
    INSTALL_DIR "${PROJECT_BINARY_DIR}/libs/glfw"
)

但是当我生成项目时(对于VS12 2013 x64)并运行ALL_BUILD,我收到以下错误:

2>    CMake Error at cmake_install.cmake:31 (file):
2>      file INSTALL cannot make directory "C:/Program Files/GLFW/include/GLFW": No
2>      such file or directory

当我尝试使用CMake构建GLFW而未指定CMAKE_INSTALL_PREFIX时出现相同的错误。

尝试解决方案

要解决此问题,我想为CMAKE_INSTALL_PREFIX ExternalProject指定glfw选项。但是,我不接缝能够做到这一点。我试过了:

SET_TARGET_PROPERTIES(glfw PROPERTIES CMAKE_INSTALL_PREFIX "${PROJECT_BINARY_DIR}/libs/glfw")

添加ExternalProject后。然而,这种接缝没有任何效果。

问题

如何为CMAKE_INSTALL_PREFIX ExternalProject设置glfw

正如@drescherjm所提到的,这次失败的根源在于CMake正在尝试在C:/Program Files中创建需要特殊权限的文件。问题是CMake默认为此位置,因为我无法在我的CMake文件中设置正确的位置。

其他信息

操作系统:Windows 8.1 x64
CMake版本:3.1.1
Visual Studio版本:社区2013 V4.5.53349
CMake File

1 个答案:

答案 0 :(得分:4)

您需要手动将CMAKE_INSTALL_PREFIX参数传递给ExternalProject_Add。试试这个:

cmake_minimum_required(VERSION 2.8)
project(Foo)

include(ExternalProject)

ExternalProject_Add(
    GLFW
    URL "https://github.com/glfw/glfw/archive/3.1.tar.gz"
    URL_HASH SHA1=fe17a0610a239311a726ecabcd2dbd669fb24ca8
    CMAKE_ARGS "-DCMAKE_INSTALL_PREFIX=${CMAKE_BINARY_DIR}/_my_install"
)