Неопределенный символ для пользовательских .h и cpp с использованием CMake

Прошло уже более десяти лет с тех пор, как я использовал C ++, и вся эта вещь CMake для меня совершенно новая. Мой вопрос, в частности, как мне настроить проект CMake, чтобы он не получал эту неопределенную ошибку символа.

Сообщение об ошибке ниже:

====================[ Build | glfw_template | Debug ]===========================
"/Users/brianyeh/Library/Application Support/JetBrains/Toolbox/apps/CLion/ch-0/193.6911.21/CLion.app/Contents/bin/cmake/mac/bin/cmake" --build /Users/brianyeh/CLionProjects/glfw_template/cmake-build-debug --target glfw_template -- -j 4
[ 50%] Linking CXX executable bin/glfw_template
Undefined symbols for architecture x86_64:
  "_LoadShaders", referenced from:
      init() in main.cpp.o
ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)
make[3]: *** [bin/glfw_template] Error 1
make[2]: *** [CMakeFiles/glfw_template.dir/all] Error 2
make[1]: *** [CMakeFiles/glfw_template.dir/rule] Error 2
make: *** [glfw_template] Error 2

Пожалуйста, перейдите по этой ссылке, чтобы увидеть проект: https://github.com/crimsonalucard/glfw_template

Желаемое поведение - проект компилируется под CMake.

Всего 1 ответ


Вам нужно собрать свой исполняемый файл со всеми .cpp файлами, используемыми в вашем проекте.

Примеры из этих ссылок:

http://derekmolloy.ie/hello-world-introductions-to-cmake/

Добавление заголовочных файлов и файлов .cpp в проект, созданный с помощью cmake

Предложите сделать что-то подобное в ваших cmakelists:

file(GLOB SOURCES
    lib/*.cpp
    include/*.h
    main.cpp
)

add_executable(glfw_template ${SOURCES})

РЕДАКТИРОВАТЬ: Согласно комментариям GLOB не рекомендуется, предпочтительным методом является ручное добавление всех источников в культивируемый список:

set(SOURCES lib/LoadShaders.cpp lib/vgl.cpp)
set(HEADERS include/LoadShaders.h include/vgl.h)

add_executable(glfw_template ${SOURCES} ${HEADERS})

Есть идеи?

10000