使用 CMake 的自定义 .h 和 cpp 的未定义符号

Undefined symbol for custom .h and cpp using 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

请参考此link查看项目:https://github.com/crimsonalucard/glfw_template

期望的行为是项目在 CMake 下编译。

您需要使用项目中使用的所有 .cpp 文件构建可执行文件。

来自这些链接的示例:

http://derekmolloy.ie/hello-world-introductions-to-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})