Я пытаюсь создать свой проект с помощью 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, не передаются компилятору. Как я могу это исправить?
Когда вы скомпилировали с использованием «только make», значит ли это, что вы написали свой собственный make-файл? Что было в том файле makefile, который не в том, который был создан CMake? –
Да, я написал свой собственный make-файл. И я не вижу возможности компоновщика в любом месте make-файла, созданного CMake. Хотя я не могу видеть флаги компилятора, но они, похоже, работают –