2013-11-26 64 views
1

我有以下結構的項目:CMake的 - 尋找外部庫

projectName-master/ 
        data/ 
        source/ 
        thirdparty/ (here is placed FindSFML.cmake file) 
        .gitignore 
        CMakeLists.txt 
        README.md 
        SOURCES.md 
        TODO.md 

我使用的CMake 2.8.11.1(cmake的-GUI)來產生視覺工作室SLN文件。路徑設置是這樣的:

  • 這裏是源代碼:E:/ PROJECTNAME主
  • 在哪裏建的二進制文件:E:/ PROJECTNAME主/源(1.可我選擇其他目錄或它應該被設置爲包含源文件的目錄:h,cpp等?)

接下來我選擇:配置 - >「指定該項目的生成器= Visual Studio 11,使用默認的本地編譯器」 - >完成

然後我得到一個信息:錯誤在配置過程中,項目文件可能是無效的

CMake的桂包含以下信息:

名稱: CMAKE_INSTALL_PREFIX C:/ Program Files文件(86)/ PROJECTNAME 名稱: SFML_INCLUDE_DIR 價值 SFML_INCLUDE_DIR-NOTFOUND

CMake Error at thirdparty/FindSFML.cmake:165 (message): 
    Could NOT find SFML (missing: SFML_SYSTEM_LIBRARY SFML_WINDOW_LIBRARY 
    SFML_AUDIO_LIBRARY SFML_NETWORK_LIBRARY SFML_GRAPHICS_LIBRARY) 
Call Stack (most recent call first): 
    CMakeLists.txt:63 (find_package) 

我下載了SFML並設置了SFML_INCLUDE_DIR(在CMake Gui中):C:/OpenGL/SFML-2.1/include/SFML但我仍然得到這個錯誤。 2.如何解決這個問題?怎麼樣的lib文件和dll的?

EDIT1: 我下載SFML從official site

FindSFML.cmake從項目中不包含任何SFML_ROOT項,但SFML_INCLUDE_DIR看起來是這樣的:

# find the SFML include directory 
find_path(SFML_INCLUDE_DIR SFML/Config.hpp 
     PATH_SUFFIXES include 
     PATHS 
     ${SFMLDIR} 
     $ENV{SFMLDIR} 
     ~/Library/Frameworks 
     /Library/Frameworks 
     /usr/local/ 
     /usr/ 
     /sw   # Fink 
     /opt/local/ # DarwinPorts 
     /opt/csw/ # Blastwave 
     /opt/) 

那麼如何設置SFML_ROOT?我需要一些條目(記錄)添加到該文件?它是如何將會是什麼樣子?

EDIT2:新FindSFML.cmake的一部分與路徑SFML(C:/OpenGL/SFML-2.1/)

find_path(SFML_INCLUDE_DIR SFML/Config.hpp 
     PATH_SUFFIXES include 
     PATHS 
     ${SFML_ROOT} 
     $ENV{SFML_ROOT} 
     C:/OpenGL/SFML-2.1/ 
     ~/Library/Frameworks 
     /Library/Frameworks 
     /usr/local/ 
     /usr/ 
     /sw   # Fink 
     /opt/local/ # DarwinPorts 
     /opt/csw/ # Blastwave 
     /opt/) 

回答

1

首先,SFML不是CMake的標準模塊,所以提供鏈接到源代碼會很好。我希望你的意思是this product。看看在FindSFML文件:

# If SFML is not installed in a standard path, you can use the SFML_ROOT CMake (or environment) variable 
# to tell CMake where SFML is. 

所以,你可能只需要設置SFML_ROOT變量,而不是SFML_INCLUDE_DIR

如何處理lib文件和dll的?

我想這可能是有益的:

# By default, the dynamic libraries of SFML will be found. To find the static ones instead, 
# you must set the SFML_STATIC_LIBRARIES variable to TRUE before calling find_package(SFML ...). 

我可以選擇其他的目錄或它應被設置爲包含源文件的目錄:H,CPP等

強烈建議use a separate directory

+0

請參閱Edit1 – Irbis

+0

我向項目位置添加了一個帶有SFML-Edit2路徑的新FindSFML.cmake。你是這個意思嗎 ? – Irbis

+0

但是如何以及在哪裏定義了SFML_ROOT?我使用CMake-Gui。 – Irbis