2015-02-03 15 views
5

Ausgabe

ich ein Projekt zu machen, versuche, die GLFW verwendet. Für dieses Projekt verwende ich als Build-System. Ich möchte es so machen, dass der Benutzer nur mein Projekt mit CMake erstellen muss, und als Teil des Prozesses wird GLFW entsprechend aufgebaut und verlinkt.CMake: GLFW als ExternalProject

Um dies zu tun, ich GLFW als ExternalProject in meiner CMake Datei bin und fügte hinzu:

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

Allerdings, wenn ich das Projekt generieren (für VS12 2013 x64) und führen ALL_BUILD bekomme ich folgende Fehlermeldung:

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 

Ich bekomme den gleichen Fehler, wenn ich versuche, GLFW mit CMake ohne Angabe der CMAKE_INSTALL_PREFIX zu bauen.

Versuchte Lösung

dies zu beheben Ich mag würde die CMAKE_INSTALL_PREFIX Option für die glfw ExternalProject angeben. Aber ich nähere das nicht, um das zu tun. Ich habe versucht:

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

Nach dem Hinzufügen des ExternalProject. Dies scheint jedoch keine Auswirkungen zu haben.

Frage

Wie stelle ich die CMAKE_INSTALL_PREFIX für die glfw ExternalProject?

Wie von @drescherjm erwähnt, liegt der Grund für diesen Fehler darin, dass CMake versucht, Dateien in C:/Program Files zu erstellen, für die es spezielle Berechtigungen benötigt. Das Problem ist, dass CMake standardmäßig auf diesen Speicherort eingestellt ist, da ich den korrekten Speicherort in meiner CMake-Datei nicht festlegen kann.

Weitere Informationen

OS: Windows 8.1 x64
CMake Version: 3.1.1
Visual Studio Version: Community 2013 V4.5.53349
CMake File

+0

Das Hauptproblem ist UAC verhindert, dass Sie Ordner und Dateien in den Programmdateien erstellen. – drescherjm

+0

@drescherjm Ich weiß. Das Problem ist, dass ich nicht möchte, dass GLFW an diesem Ort installiert wird. Stattdessen möchte ich, dass es in meinem CMake-Projektverzeichnis installiert wird. CMake ist standardmäßig auf diesen Ort in Windows voreingestellt. –

+0

Setzen Sie 'CMAKE_INSTALL_PREFIX' auf etwas anderes als Programme. Ich benutze die set_target_properties nicht, um dies zu tun. Ich benutze set Ändern Sie das Installationspräfix für alle Ziele in meiner CMakeLists.txt – drescherjm

Antwort

3

Sie muss das CMAKE_INSTALL_PREFIX Argument manuell anübergeben. Versuchen Sie diese:

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

Nur neugierig, warum geben Sie eine URL zu einem tar statt einer git url? Ist es so, dass Benutzer bauen können, ohne git installiert zu haben? –

+0

@NoahHuppert ja, ich habe es jetzt auf Windows getestet, werde mich nicht mit der git location beschäftigen :) –