2011-09-16 120 views
6

我想了解如何使用cmake外部项目模块下载和编译外部库。使用Git存储库的CMake EXTERNALPROJECT_ADD的正确用法是什么?

例如,假设我想从SFML库https://github.com/LaurentGomila/SFML.git下载源代码并进行编译。我曾尝试使用类似以下的内容。不幸的是,我想不通为什么它之后的源被克隆:(

EXTERNALPROJECT_ADD(sfml 
PREFIX ${sfml_PREFIX} 

GIT_REPOSITORY https://github.com/LaurentGomila/SFML.git 

INSTALL_DIR ${sfml_INSTALL_DIR} 
CMAKE_ARGS ${sfml_CMAKE_ARGS}) 

回答

12

未编译也许你的变量不包含你认为它们所包含的价值观......仔细检查您的sfml_的价值*变量也仔细检查了CMake的变量GIT_EXECUTABLE有你,包括ExternalProject后所期望的价值...

下的CMakeLists.txt文件中使用的CMake 2.8.5对我的作品在我的Mac:

cmake_minimum_required(VERSION 2.8) 
project(SfmlBuilder) 
include(ExternalProject) 

set(sfml_PREFIX "${CMAKE_CURRENT_BINARY_DIR}/sfml") 
set(sfml_INSTALL_DIR "${CMAKE_CURRENT_BINARY_DIR}/sfml") 
set(sfml_CMAKE_ARGS -DCMAKE_INSTALL_PREFIX=${sfml_INSTALL_DIR}) 

message("sfml_PREFIX='${sfml_PREFIX}'") 
message("sfml_INSTALL_DIR='${sfml_INSTALL_DIR}'") 
message("sfml_CMAKE_ARGS='${sfml_CMAKE_ARGS}'") 
message("GIT_EXECUTABLE='${GIT_EXECUTABLE}'") 

ExternalProject_Add(sfml 
    PREFIX ${sfml_PREFIX} 
    GIT_REPOSITORY https://github.com/LaurentGomila/SFML.git 
    INSTALL_DIR ${sfml_INSTALL_DIR} 
    CMAKE_ARGS ${sfml_CMAKE_ARGS} 
) 

它在安装过程中失败了,并带有许可权离子被拒绝,因为我没有运行“make”作为sudo,并且它试图安装到绝对路径“/Library/Frameworks/sndfile.framework”

还有一条建议。我注意到你正在将“/ Applications/CMake 2.8-5.app/Contents/share/cmake-2.8/Modules/FindSFML.cmake”直接安装到CMake安装中......这通常是不鼓励的,因为对CMake的修改如果用户卸载并重新安装CMake,安装很可能会消失。或者干脆升级到另一个CMake。或者使用计算机上也安装的第二个或第三个CMake。

您应该在您自己的安装中创建一个项目配置文件,CMake可以通过它的内置规则找到在标准位置查找软件包。有关项目配置文件的完整详细信息,请阅读CMake find_package文档的细则:

http://cmake.org/cmake/help/cmake-2-8-docs.html#command:find_package

相关问题