CMake EXTERNALPROJECT_ADD与Git存储库的正确用法是什么?

Mur*_*kie 6 cmake sfml

我想学习如何使用cmake外部项目模块下载和编译外部库.

例如,假设我想从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})
Run Code Online (Sandbox Code Playgroud)

DLR*_*ave 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}
)
Run Code Online (Sandbox Code Playgroud)

由于我没有以sudo的身份运行"make",因此我在安装过程中失败,因为我没有运行"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