CMake: 将GLFW作为ExternalProject

6

问题

我正在尝试制作一个使用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_INSTALL_PREFIX的情况下使用CMake构建GLFW,会出现相同的错误。

尝试的解决方案

为了解决这个问题,我想为glfw ExternalProject指定CMAKE_INSTALL_PREFIX选项。但是我似乎无法做到这一点。我已经尝试过:

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

在添加了ExternalProject之后,但是似乎没有任何效果。
问题:
如何为glfw ExternalProject设置CMAKE_INSTALL_PREFIX?
正如@drescherjm所提到的,这个失败的根源在于CMake试图在“C:/Program Files”中创建文件,这需要特殊权限。问题在于CMake默认使用此位置,因为我无法在我的CMake文件中设置正确的位置。
附加信息:
操作系统:Windows 8.1 x64 CMake版本:3.1.1 Visual Studio版本:Community 2013 V4.5.53349 CMake文件

主要问题是UAC阻止您在Program Files中创建文件夹和文件。 - drescherjm
@drescherjm 我知道。问题是我不想让GLFW安装在那个位置。相反,我希望它安装在我的CMake项目目录中。在Windows上,CMake只是默认使用那个位置。 - Noah Huppert
1
从文档http://www.cmake.org/cmake/help/v3.0/module/ExternalProject.html中可以看到,`EXTERNALPROJECT_ADD`有一个`INSTALL_DIR`参数,用于设置安装前缀。 - drescherjm
不确定为什么它不起作用。很抱歉浪费了您的时间。我自2008年以来每天都使用CMake,但我主要不使用ExternalProject_Add,因为我的大多数应用程序都需要相同的库,并且我通过批处理脚本CMake创建这些库。 - drescherjm
1
如果你想在项目中更轻松地使用GLFW,可以看看biicode这个例子。只需要花费一点时间,就能为你节省很多时间;)免责声明:我在biicode工作。 - fenix688
显示剩余4条评论
1个回答

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"
)

只是好奇,为什么您要指定一个tar的URL而不是git的URL?这样做是为了让用户在没有安装git的情况下进行构建吗? - Noah Huppert
@NoahHuppert 是的,我现在已经在Windows上测试过了,不会再去烦Git位置了 :) - user2288008

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接