配置CLion,Cmake和SFML的问题

时间:2015-01-30 19:40:52

标签: cmake sfml clion

我目前正在尝试配置我的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

2 个答案:

答案 0 :(得分:8)

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

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

另请注意,由于您在REQUIRED的参数中指定了find_package(),因此如果无法找到包,CMake将以错误终止。因此if(SFML_FOUND)毫无意义。

答案 1 :(得分:-1)

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

您创建一个名为" cmake_modules"的文件夹。在项目的根目录中,您将此文件夹放在" FindSFML.cmake"文件(在Windows和Mac OS X上:" [Your_SFML位置] /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()