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

标签 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})

最佳答案

也许您的变量不包含您认为它们包含的值...仔细检查您的 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}
)

它在安装过程中失败,权限被拒绝,因为我没有以 sudo 运行“make”,它尝试安装到绝对路径“/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

关于cmake - CMake EXTERNALPROJECT_ADD 与 Git 存储库的正确用法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7440163/

相关文章:

c++ - CMake 链接 GoogleTest 和 UnitTests

c++ - Cppcheck Cmake集成: abort build on warning

C++、Ogre3D、SFML,共享资源?

python - 使 pySFML 在 Linux 上工作

c++ - 使用 protobuf 构建 CMake 项目

cmake - 在 Visual Studio Online 托管代理上使用 CMake 构建

c++ - 将导入的库链接到 CMake ExternalProject

c++ - 运算符 '*' 不明确 (C++)

c++ - 写了一些柏林噪音类型的代码,它看起来很 block 状

c++ - 迭代并从 Vector 中删除元素。错误 :Vector iterator not Incrementable