Я использую экспериментальные функции хеширования 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 (с возможными исправлениями!):
Большое спасибо всем ~