2015-04-02 79 views
0

我正在使用SDL(v1.2.15-7)和CMake(3.2.1)开发项目。在* .h文件中我添加了#include <SDL.h>,当我编译它时,我有一堆错误:未定义的SDL参考_...使用CMake未定义的SDL引用

我认为错误来自CMakeLists.txt,但我确实没有知道在哪里。

这里的文件内容:

CMAKE_MINIMUM_REQUIRED(VERSION 2.8) 

    SET(PROJ_NAME  "Project") 
    SET(PROJ_PATH  ${CMAKE_SOURCE_DIR}) 
    SET(PROJ_OUT_PATH ${CMAKE_BINARY_DIR}) 
    SET(PROJ_INCLUDES "include") 

    FILE(GLOB_RECURSE PROJ_SOURCES src/*cpp test/*cpp doc/*) 
    FILE(GLOB_RECURSE PROJ_HEADERS ${PROJ_INCLUDES}/${PROJ_NAME}/*.h) 

    PROJECT(${PROJ_NAME}) 

    SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++0x") 

    FIND_PACKAGE(SDL REQUIRED) 

    SET(PROJ_LIBRARIES ${SDL_LIBS}) 

    INCLUDE_DIRECTORIES(${PROJ_INCLUDES} ${SDL_INCLUDE_DIR}) 
    ADD_EXECUTABLE(${PROJ_NAME} ${PROJ_SOURCES} ${PROJ_HEADERS}) 
    TARGET_LINK_LIBRARIES(${PROJ_NAME} ${PROJ_LIBRARIES}) 

我也试过#include SDL/SDL.h

+0

您不需要添加所有标题。通常它们与您的目标相关,并且会自动找到。 – usr1234567 2015-04-02 14:32:54

回答

1

尝试使用SDL_LIBRARY代替SDL_LIBS

+0

谢谢......我觉得这很愚蠢,下次我会更仔细地看看 – Kruncho 2015-04-02 14:57:32

+0

@Kruncho:用'make VERBOSE = ON'你会看到图书馆没有通过。下次 :-) – usr1234567 2015-04-02 15:01:48

0

你忘了你的目标在你的CMakeLists.txt的最后一行链接到SDL_LIBRARIES

链接器产生错误,所以它与你的包含无关。

+0

不,我没有忘记,它包含在'SET(PROJ_LIBRARIES $ {SDL_LIBS})'中。但我仍然试过,它没有效果 – Kruncho 2015-04-02 14:37:07

+0

他指的是你拼错变量名称的事实。 “SDL_LIBS”与“SDL_LIBRARIES”不同。在第一种情况下,CMake只是简单地将它评估为空字符串,因此您最终不会链接到任何库。 – 2015-04-02 15:03:20

2

错误消息从连接器,在这种情况下就意味着你没有链接对SDL库的到来。

CMake文档指定FindSDL模块定义一个名为SDL_LIBRARY的变量,但您使用的是SDL_LIBS。所以,改为SET(PROJ_LIBRARIES ${SDL_LIBRARY})

当使用标准模块查找软件包时,请先浏览文档以查看它定义的变量。名称并不总是标准的。

相关问题