GLM не удается собрать при использовании Clion - PullRequest
0 голосов
/ 27 мая 2019

Я использую экспериментальные функции хеширования GLM в проекте CMake. Все работает нормально, если проект не сгенерирован Clion.

При создании проекта, сгенерированного Clion, GLM выдает ошибку «GLM_GTX_hash требует поддержки стандартной библиотеки C ++ 11» (см. Журналы CMake), хотя C ++ 11 включен. Сборка одного и того же, сгенерированного clion, проекта из терминала завершается с той же ошибкой.

Тем не менее, при генерации и сборке проекта с помощью cmake «вручную» (даже не подозревая об этом Clion) все работает нормально. Как и ожидалось.

GLM напрямую не включен в CMakeList. GLFW включает / импортирует его.

Пример CMakeLists.txt

(...)
set(CMAKE_CXX_STANDARD 11)

add_executable(Test main.cpp)
(...)
add_subdirectory("glfw" ${CMAKE_CURRENT_BINARY_DIR}/glfw)
target_include_directories(Test PUBLIC ${GLFW_INCLUDE_DIRS})
target_link_libraries(Test ${GLFW_LIBRARIES} glfw)

Пример main.cpp

#define GLM_FORCE_RADIANS
#define GLM_FORCE_DEPTH_ZERO_TO_ONE
#include <glm/glm.hpp>
#include <glm/gtc/matrix_transform.hpp>
#define GLM_ENABLE_EXPERIMENTAL
#include <glm/gtx/hash.hpp>

int main() {
    return 0;
}

Выход сборки Clion:

/usr/bin/cmake --build /home/lukas/Test/cmake-build-debug --target Test -- -j 2
[ 89%] Built target glfw
Scanning dependencies of target Test
[ 94%] Building CXX object CMakeFiles/Test.dir/main.cpp.o
In file included from /home/lukas/Test/main.cpp:8:
/usr/include/glm/gtx/hash.hpp:46:3: error: "GLM_GTX_hash requires C++11 standard library support"
#       error "GLM_GTX_hash requires C++11 standard library support"
        ^
1 error generated.
make[3]: *** [CMakeFiles/Test.dir/build.make:63: CMakeFiles/Test.dir/main.cpp.o] Error 1
make[2]: *** [CMakeFiles/Makefile2:73: CMakeFiles/Test.dir/all] Error 2
make[1]: *** [CMakeFiles/Makefile2:85: CMakeFiles/Test.dir/rule] Error 2
make: *** [Makefile:118: Test] Error 2

Терминальный выход (как и ожидалось)

$ cmake -H. -Bbuild -G "Unix Makefiles" && cmake --build build                                                                                                                 
Scanning dependencies of target glfw
[  5%] Building C object glfw/src/CMakeFiles/glfw.dir/context.c.o
[ 10%] Building C object glfw/src/CMakeFiles/glfw.dir/init.c.o
[ 15%] Building C object glfw/src/CMakeFiles/glfw.dir/input.c.o
[ 21%] Building C object glfw/src/CMakeFiles/glfw.dir/monitor.c.o
[ 26%] Building C object glfw/src/CMakeFiles/glfw.dir/vulkan.c.o
[ 31%] Building C object glfw/src/CMakeFiles/glfw.dir/window.c.o
[ 36%] Building C object glfw/src/CMakeFiles/glfw.dir/x11_init.c.o
[ 42%] Building C object glfw/src/CMakeFiles/glfw.dir/x11_monitor.c.o
[ 47%] Building C object glfw/src/CMakeFiles/glfw.dir/x11_window.c.o
[ 52%] Building C object glfw/src/CMakeFiles/glfw.dir/xkb_unicode.c.o
[ 57%] Building C object glfw/src/CMakeFiles/glfw.dir/posix_time.c.o
[ 63%] Building C object glfw/src/CMakeFiles/glfw.dir/posix_thread.c.o
[ 68%] Building C object glfw/src/CMakeFiles/glfw.dir/glx_context.c.o
[ 73%] Building C object glfw/src/CMakeFiles/glfw.dir/egl_context.c.o
[ 78%] Building C object glfw/src/CMakeFiles/glfw.dir/osmesa_context.c.o
[ 84%] Building C object glfw/src/CMakeFiles/glfw.dir/linux_joystick.c.o
[ 89%] Linking C static library libglfw3.a
[ 89%] Built target glfw
Scanning dependencies of target Test
[ 94%] Building CXX object CMakeFiles/Test.dir/main.cpp.o
[100%] Linking CXX executable Test
[100%] Built target Test

Теперь мне действительно любопытно, скорее я что-то напутал или это просто ошибка. И если да, то где мне сообщить об этом? [Clion / Jetbrains ?, GLM ?, GLFW ?, CMake?]

Заранее спасибо

Обновление

Я использую последние доступные (для меня) сборки:
Версия CMake: 3.14.4
Операционная система: Arch Linux 5.0.18-1 x86_64 GNU / Linux
Версия GLFW / commit: d834f01c
GLM версия / коммит: fce2abd0
Клион: 2019.1.3
Clion EAP: 2019,2 EAP

Окончательное обновление / «Решение»

Я только что обнаружил, что проблема в Кланге, а не в Клионе или чем-то еще. Clion просто по умолчанию установил Clang (вместо GCC).
Уже существуют отчеты об ошибках для GLM и Clang (с возможными исправлениями!):

Большое спасибо всем ~

...