【问题标题】:Issues Configuring CLion, Cmake, and SFML配置 CLion、Cmake 和 SFML 的问题
【发布时间】:2015-03-30 08:55:33
【问题描述】:

我目前正在尝试配置我的 Cmake 文件以包含 SFML 库。 我的 CMakeLists.txt。如果这很重要,我正在使用 OS X Yosemite。

cmake_minimum_required(VERSION 2.8.4)
project(SFMLTest)

set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11 -stdlib=lib++")

set(SOURCE_FILES main.cpp)
add_executable(SFMLTest ${SOURCE_FILES})

#Detect and add SFML
set(CMAKE_MODULE_PATH "${CMAKE_SOURCE_DIR}/Users/Home/SFML-2.2-osx-clang-universal/cmake/Modules" ${CMAKE_MODULE_PATH})
find_package(SFML 2.2 REQUIRED system window graphics network audio)
if (SFML_FOUND)
    include_directories(${SFML_INCLUDE_DIR})
    target_link_libraries(${main.cpp} ${SFML_Libraries})
endif()

我目前遇到的错误是

Error:By not providing "FindSFML.cmake" in CMAKE_MODULE_PATH this project has asked 
CMake to find a package configuration file provided by "SFML", but CMake did notfind one.
Could not find a package configuration file provided by "SFML" (requested version 2.2) 
with any of the following names:
 SFMLConfig.cmake   sfml-config.cmake
Add the installation prefix of "SFML" to CMAKE_PREFIX_PATH or 
set "SFML_DIR"to a directory containing one of the above files.  
If "SFML" provides a separate development package or SDK, be sure it has been installed.

我的 FindSFML.cmake 位于

/Users/Home/SFML-2.2-osx-clang-universal/cmake/Modules

【问题讨论】:

  • 磁盘上文件的确切名称是什么?你说“我的 findSFML.cmake 是……”CMake 正在寻找 FindSFML.cmake。注意大小写差异。为什么要在路径前加上${CMAKE_SOURCE_DIR}
  • Angew,FindSFML.cmake 是我的一个错字,我在 SO 上的一篇旧帖子中找到了这个解决方案,但它并没有像他们所说的那样帮助......

标签: cmake sfml clion


【解决方案1】:

这个解决方案很完美:https://oxymeos.shost.ca/article.php?about=work_with_the_SFML_in_CLion。我推荐它!它对我有用

您在项目的根目录下创建一个名为“cmake_modules”的文件夹,并将“FindSFML.cmake”文件(在 Windows 和 Mac OS X 上:“[Your_SFML Location]/cmake/Modules/FindSFML. cmake”,在 Linux 上:“[Your_SFML_location]/share/SFML/cmake/Modules/FindSFML.cmake”。

CMake 配置文件 (CMakeLists.txt) 然后以这种形式呈现:

cmake_minimum_required(VERSION 3.7)
project([your_project])

# Define the source and the executable
set(EXECUTABLE_NAME "[name_executable]")
add_executable(${EXECUTABLE_NAME} [project_files])


# Detect and add SFML
set(CMAKE_MODULE_PATH "${CMAKE_SOURCE_DIR}" ${CMAKE_MODULE_PATH})
find_package(SFML 2 REQUIRED system window graphics network audio)
if(SFML_FOUND)
    include_directories(${SFML_INCLUDE_DIR})
    target_link_libraries(${EXECUTABLE_NAME} ${SFML_LIBRARIES})
endif()

【讨论】:

    【解决方案2】:

    您的问题是查找模块的完整路径是

    /Users/Home/SFML-2.2-osx-clang-universal/cmake/Modules/FindSFML.cmake
    

    但是您将${CMAKE_SOURCE_DIR}/Users/Home/SFML-2.2-osx-clang-universal/cmake/Modules 添加到您的CMAKE_MODULE_PATH${CMAKE_SOURCE_DIR} 是包含顶级 CMakeLists.txt 文件的目录的绝对路径。如果您知道要包含的模块文件的绝对路径,则绝对不应该在其前面加上源树路径。只需将行更改为:

    set(CMAKE_MODULE_PATH "/Users/Home/SFML-2.2-osx-clang-universal/cmake/Modules" ${CMAKE_MODULE_PATH})
    

    还请注意,由于您在find_package() 的参数中指定了REQUIRED,如果找不到包,CMake 将终止并出现错误。因此,拥有if(SFML_FOUND) 毫无意义。

    【讨论】:

    • @David:你介意接受这个答案吗?否则问题看起来没有得到回答。
    猜你喜欢
    • 2015-10-19
    • 2017-04-07
    • 1970-01-01
    • 1970-01-01
    • 2018-01-08
    • 2017-09-29
    • 2020-05-08
    • 2020-08-08
    • 1970-01-01
    相关资源
    最近更新 更多