2013-11-26 63 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