What is the correct usage of CMake EXTERNALPROJECT_ADD with a Git repository?

后端 未结 1 1439
闹比i
闹比i 2021-02-06 10:58

I would like to learn how to download and compile external libraries using the cmake external project module.

For example, lets say that I wanted to download the source

相关标签:
1条回答
  • 2021-02-06 11:02

    Perhaps your variables do not contain the values you think they contain... Double check the value of your sfml_* variables. Also double check that the CMake variable GIT_EXECUTABLE has the value you expect after including ExternalProject...

    The following CMakeLists.txt file works for me on my Mac using CMake 2.8.5:

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

    It fails during the install for me with a permission denied because I did not run "make" as sudo, and it tries to install into the absolute path "/Library/Frameworks/sndfile.framework"

    One other piece of advice, too. I notice you're installing "/Applications/CMake 2.8-5.app/Contents/share/cmake-2.8/Modules/FindSFML.cmake" directly into the CMake installation... That is generally discouraged, as that modification to the CMake installation is likely to disappear if the user uninstalls and re-installs CMake. Or simply upgrades to another CMake. Or uses a 2nd or 3rd CMake that is also installed on the computer.

    You should instead create a project config file in your own installation, that CMake can find with it's built-in rules for finding packages at standard locations. Read the fine print of the CMake find_package documentation for the full details on project config files:

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

    0 讨论(0)
提交回复
热议问题