2014-10-14 2 views
0

Я пытаюсь создать свой проект с помощью CMake, но у меня возникла ошибка связывания требуемых библиотек. У меня есть эта CMakeLists.txt в корневой папке моего проекта:CMake linker не работает правильно

cmake_minimum_required(VERSION 2.6) 
project(test) 
add_subdirectory(src) 

И в моей папке Src, рядом с моими исходными файлами у меня есть этот CMakeLists.txt:

set (CMAKE_CXX_FLAGS "Wall -std=c++11") 
set (CMAKE_EXE_LINKER_FLAGS "-lSDL2 -lGL") 
file (GLOB SRCS *.cpp *.h) 
add_executable(engine ${SRCS}) 

Я затем перейти в создать папку и сделать cmake .., и она работает без каких-либо ошибок. Когда я make, компиляция проходит без ошибок, а также, но когда дело доходит до связующей части, я получаю эти ошибки:

CMakeFiles/test.dir/Application.cpp.o: In function `Application::onExecute()': 
Application.cpp:(.text+0x41): undefined reference to `SDL_GetTicks' 
Application.cpp:(.text+0x4e): undefined reference to `SDL_GetTicks' 
Application.cpp:(.text+0xd7): undefined reference to `SDL_PollEvent' 
CMakeFiles/test.dir/Application.cpp.o: In function `Application::render()': 
Application.cpp:(.text+0x17b): undefined reference to `glClearColor' 
Application.cpp:(.text+0x185): undefined reference to `glClear' 
Application.cpp:(.text+0x194): undefined reference to `SDL_GL_SwapWindow' 
CMakeFiles/test.dir/Application.cpp.o: In function `Application::cleanUp()': 
Application.cpp:(.text+0x1b2): undefined reference to `SDL_GL_DeleteContext' 
Application.cpp:(.text+0x1c1): undefined reference to `SDL_DestroyWindow' 
Application.cpp:(.text+0x1c6): undefined reference to `SDL_Quit' 
CMakeFiles/test.dir/Application.cpp.o: In function `Application::initialize()': 
Application.cpp:(.text+0x1de): undefined reference to `SDL_Init' 
Application.cpp:(.text+0x1ea): undefined reference to `SDL_GetError' 
Application.cpp:(.text+0x22b): undefined reference to `SDL_CreateWindow' 
Application.cpp:(.text+0x243): undefined reference to `SDL_GetError' 
Application.cpp:(.text+0x25a): undefined reference to `SDL_Quit' 
Application.cpp:(.text+0x270): undefined reference to `SDL_GL_SetAttribute' 
Application.cpp:(.text+0x27f): undefined reference to `SDL_GL_SetAttribute' 
Application.cpp:(.text+0x28e): undefined reference to `SDL_GL_SetAttribute' 
Application.cpp:(.text+0x29d): undefined reference to `SDL_GL_CreateContext' 
Application.cpp:(.text+0x2af): undefined reference to `glGetString' 
collect2: error: ld returned 1 exit status 
make[2]: *** [src/test] Error 1 
make[1]: *** [src/CMakeFiles/test.dir/all] Error 2 
make: *** [all] Error 2 

меня правильно включает в мои файлы заголовков, и я был в состоянии собрать и работать, используя только make, поэтому я думаю, что флаги компоновщика, которые я говорю CMake, не передаются компилятору. Как я могу это исправить?

+0

Когда вы скомпилировали с использованием «только make», значит ли это, что вы написали свой собственный make-файл? Что было в том файле makefile, который не в том, который был создан CMake? –

+0

Да, я написал свой собственный make-файл. И я не вижу возможности компоновщика в любом месте make-файла, созданного CMake. Хотя я не могу видеть флаги компилятора, но они, похоже, работают –

ответ

2

Вы должны использовать команду cmake target_link_libraries для ссылки на SDL libs.

Смежные вопросы