Как включить заголовочные файлы из / usr / include в мой проект cmake?

0

Я просматривал похожие, существующие вопросы о переполнении стека, но я все еще не знаю (это мой первый раз, когда я использовал cmake). Я просто хочу включать заголовки, которые лежат в подкаталогах /usr/include в моем проекте cmake, но я, очевидно, не знаю, что я делаю :-) Я использую оболочку Bash и vim, потому что я классный, как Мик Джаггер.

Вот мой CMakeLists.txt:

cmake_minimum_required (VERSION 2.8)

project (VoxelRPG)

set (VoxelRPG_VERSION_MAJOR 0)
set (VoxelRPG_VERSION_MINOR 1)

configure_file (
        "${PROJECT_SOURCE_DIR}/src/VoxelRPG.h.in"
        "${PROJECT_SOURCE_DIR}/src/VoxelRPG.h"
)

subdirs(src)

include_directories("/usr/include" "/usr/include/GL" "/usr/include/glm" "/usr/include/glm/gtc" "${PROJECT_SOURCE_DIR}/src")

set(HEADER_FILES "/usr/include/GL/glew.h" "/usr/include/GL/glfw.h" "/usr/include/glm/glm.hpp" "/usr/include/glm/gtc/matrix_transform.hpp")

add_executable(voxel_rpg src/main.cpp ${HEADER_FILES})

CMakeLists.txt в каталоге src - одна строка:

cmake_minimum_required (VERSION 2.8)

Вот глава main.cpp (он показывает заголовки, которые я хочу использовать):

// Include GLEW
#include <GL/glew.h>

// Include GLFW
#include <GL/glfw.h>

// Include GLM
#include <glm/glm.hpp>
#include <glm/gtc/matrix_transform.hpp>
using namespace glm;

#include "shader.hpp"
#include "texture.hpp"

Операция cmake не вызывает ошибку:

chris@stupid:~/voxel_rpg$ cmake .
-- Configuring done
-- Generating done
-- Build files have been written to: /home/chris/voxel_rpg

Однако операция make выплевывает это сообщение об ошибке:

chris@stupid:~/voxel_rpg$ make
Linking CXX executable voxel_rpg
CMakeFiles/voxel_rpg.dir/src/main.cpp.o: In function 'main':
main.cpp:(.text+0x16): undefined reference to 'glfwInit'
main.cpp:(.text+0x62): undefined reference to 'glfwOpenWindowHint'
main.cpp:(.text+0x76): undefined reference to 'glfwOpenWindowHint'
main.cpp:(.text+0x8a): undefined reference to 'glfwOpenWindowHint'
main.cpp:(.text+0x9e): undefined reference to 'glfwOpenWindowHint'
main.cpp:(.text+0xea): undefined reference to 'glfwOpenWindow'
main.cpp:(.text+0x11d): undefined reference to 'glfwTerminate'
main.cpp:(.text+0x12d): undefined reference to 'glewExperimental'
main.cpp:(.text+0x133): undefined reference to 'glewInit'
main.cpp:(.text+0x177): undefined reference to 'glfwSetWindowTitle'
main.cpp:(.text+0x183): undefined reference to 'glfwEnable'
main.cpp:(.text+0x1ab): undefined reference to 'glClearColor'
main.cpp:(.text+0x1b7): undefined reference to 'glEnable'
main.cpp:(.text+0x1c3): undefined reference to 'glDepthFunc'
main.cpp:(.text+0x1c8): undefined reference to '__glewGenVertexArrays'
main.cpp:(.text+0x1e0): undefined reference to '__glewBindVertexArray'
main.cpp:(.text+0x1ff): undefined reference to 'LoadShaders(char const*, char const*)'
main.cpp:(.text+0x20a): undefined reference to '__glewGetUniformLocation'
main.cpp:(.text+0x408): undefined reference to 'loadDDS(char const*)'
main.cpp:(.text+0x413): undefined reference to '__glewGetUniformLocation'
main.cpp:(.text+0x431): undefined reference to '__glewGenBuffers'
main.cpp:(.text+0x449): undefined reference to '__glewBindBuffer'
main.cpp:(.text+0x461): undefined reference to '__glewBufferData'
main.cpp:(.text+0x487): undefined reference to '__glewGenBuffers'
main.cpp:(.text+0x49f): undefined reference to '__glewBindBuffer'
main.cpp:(.text+0x4b7): undefined reference to '__glewBufferData'
main.cpp:(.text+0x4e4): undefined reference to 'glClear'
main.cpp:(.text+0x4e9): undefined reference to '__glewUseProgram'
main.cpp:(.text+0x4fa): undefined reference to '__glewUniformMatrix4fv'
main.cpp:(.text+0x546): undefined reference to '__glewActiveTexture'
main.cpp:(.text+0x565): undefined reference to 'glBindTexture'
main.cpp:(.text+0x56a): undefined reference to '__glewUniform1i'
main.cpp:(.text+0x582): undefined reference to '__glewEnableVertexAttribArray'
main.cpp:(.text+0x590): undefined reference to '__glewBindBuffer'
main.cpp:(.text+0x5a8): undefined reference to '__glewVertexAttribPointer'
main.cpp:(.text+0x5de): undefined reference to '__glewEnableVertexAttribArray'
main.cpp:(.text+0x5ec): undefined reference to '__glewBindBuffer'
main.cpp:(.text+0x604): undefined reference to '__glewVertexAttribPointer'
main.cpp:(.text+0x651): undefined reference to 'glDrawArrays'
main.cpp:(.text+0x656): undefined reference to '__glewDisableVertexAttribArray'
main.cpp:(.text+0x664): undefined reference to '__glewDisableVertexAttribArray'
main.cpp:(.text+0x672): undefined reference to 'glfwSwapBuffers'
main.cpp:(.text+0x67e): undefined reference to 'glfwGetKey'
main.cpp:(.text+0x68f): undefined reference to 'glfwGetWindowParam'
main.cpp:(.text+0x6ac): undefined reference to '__glewDeleteBuffers'
main.cpp:(.text+0x6c4): undefined reference to '__glewDeleteBuffers'
main.cpp:(.text+0x6dc): undefined reference to '__glewDeleteProgram'
main.cpp:(.text+0x6fd): undefined reference to 'glDeleteTextures'
main.cpp:(.text+0x702): undefined reference to '__glewDeleteVertexArrays'
main.cpp:(.text+0x71a): undefined reference to 'glfwTerminate'
collect2: error: ld returned 1 exit status
make[2]: *** [voxel_rpg] Error 1
make[1]: *** [CMakeFiles/voxel_rpg.dir/all] Error 2
make: *** [all] Error 2

Спасибо заранее огромным людям, которые помогают мне!

  • 2
    У вас ошибка компоновщика - вам нужно связать библиотеку gl с вашим проектом - с заголовочными файлами все в порядке.
  • 0
    Вы правы - и поскольку это на самом деле вопрос о связывании, этот вопрос является дубликатом другого вопроса ( stackoverflow.com/questions/14077611/… ). Я собираюсь удалить этот вопрос.
Показать ещё 1 комментарий
Теги:
cmake

1 ответ

1
Лучший ответ

Я думаю, вы хотите использовать -L/usr/X11R6/lib -L/usr/local/lib -LGL -LGLU -Lm -Lglut чтобы добавить библиотеки OpenGL. Во-вторых, вам не нужно добавлять эти подкаталоги в ваши include_directories (или даже "/usr/include", поскольку gcc должен искать там по умолчанию).

  • 0
    У меня проблема с поиском /usr/include/zlib.h даже там, где он есть. Добавление include_directories (/ usr / include) в CMakeLists.txt, похоже, не помогает. Там должно быть что-то еще не так. Это происходит только в моем файле Docker, но не в моей обычной машине. Кто-нибудь понял?

Ещё вопросы

Сообщество Overcoder
Наверх
Меню