2017-08-11 18 views
0

SFakeのクロスプラットフォームプラグインを開発したいので、私は最近CMake for Windowsをダウンロードしました。これはhereです。ガイドに従って、私はCMakeLists.txt,main.cpp(SFMLコードを持っている)とFindSFML.cmakeというファイルを保持するcmake_modulesというフォルダを持つsfml_test_cmake(Windows 10)というフォルダを私のDocumentsディレクトリに作成しました。 CMakeLists.txtは、次のようになります。単純なプロジェクトを作成するときにCMakeがWindowsでSFMLディレクトリを見つけることができない

cmake_minimum_required(VERSION 3.9) 
project(SFML-CmakeTest) 

set(EXECUTABLE_NAME "sfml_test_cmake") 

add_executable(${EXECUTABLE_NAME} main.cpp) 

set(CMAKE_MODULE_PATH "${CMAKE_SOURCE_DIR}/cmake_modules" ${CMAKE_MODULE_PATH}) 
find_package(SFML 2.4 REQUIRED system window graphics network audio) 
target_link_libraries(${EXECUTABLE_NAME} ${SFML_LIBRARIES}) 

install(TARGETS ${EXECUTABLE_NAME} DESTINATION bin) 

を、次のように簡単なテストプログラムであるmain.cppは、なりますSFMLがインストールされている場所については

#include <SFML/Graphics.hpp> 

int main() 
{ 
    sf::RenderWindow testWindow{ sf::VideoMode{ 640, 480 }, "Test Window", sf::Style::Default }; 

    while (testWindow.isOpen()) 
    { 
     sf::Event winEvent; 
     while (testWindow.pollEvent(winEvent)) 
     { 
      if (winEvent.type == sf::Event::Closed) 
      { 
       testWindow.close(); 
      } 
     } 
     testWindow.clear(); 
     testWindow.display(); 
    } 
} 

を、それが、私のDocumentsディレクトリの両方にインストールされていますドライブはC:\です。最終的にコードをビルドするには、私はcmd.exeを開き、ビルドのために私のフォルダの中に新しいディレクトリを作成し、cmake ..を実行しました。私が得たエラーは以下の通りであった。FindSFML.cmakeで見たら

CMake Error at cmake_modules/FindSFML.cmake:357 (message): 
    Could NOT find SFML (missing: SFML_SYSTEM_LIBRARY SFML_WINDOW_LIBRARY 
    SFML_GRAPHICS_LIBRARY SFML_NETWORK_LIBRARY SFML_AUDIO_LIBRARY) 

が、私はこれを見つけた:

伝え
# define the list of search paths for headers and libraries 
set(FIND_SFML_PATHS 
    ${SFML_ROOT} 
    $ENV{SFML_ROOT} 
    ~/Library/Frameworks 
    /Library/Frameworks 
    /usr/local 
    /usr 
    /sw 
    /opt/local 
    /opt/csw 
    /opt) 

私の私は、Linux上にあった場合はcmakeのはディレクトリのみで検索されると、それは中だろうSFMLことディレクトリが見つからなかった理由を説明します。この問題を解決するには、私は次のように関数を変更:

# define the list of search paths for headers and libraries 
set(FIND_SFML_PATHS 
    ${SFML_ROOT} 
    $ENV{SFML_ROOT} 
    ~/Library/Frameworks 
    /Library/Frameworks 
    /usr/local 
    /usr 
    /sw 
    /opt/local 
    /opt/csw 
    /opt 
    C:/) 

しかし、今回の再構築が私に混乱を残して、同じエラーが発生しました。私は間違って何をしていますか?

答えて

2

元のFindSFML.cmakeを変更しないでください。代わりに、コンピュータにインストールされているSFMLが存在するパスを含む変数CMAKE_PREFIX_PATHを定義します。検索されたパスのリストに "C:\"を追加すると、cmakeは指定されたパスのすべてのディレクトリを再帰的に検索しません。

+0

ああ待って、nvm、私は[ここ](https://stackoverflow.com/a/7031130/6525260)から入手しました。 –

+0

しかし、今回はビルドされたソリューションで別のエラーが発生しています。私はCMakeを次のように実行しました: 'cmake .. -DCMAKE_PREFIX_PATH = C:/ SFML-2.4.2'。しかし、私がソリューションをビルドすると、「Can not open file SFML/Graphics.hpp':No such file or directory'」というエラーが表示されます。あなたの答えはそれにもかかわらず正しいです。 –

+0

あなたのcmakeに '' '' target_include_directories($ {EXECUTABLE_NAME} $ {SFML_INCUDE_DIR}) ''コマンドを追加するべきです。 –

関連する問題