我有一个c ++,opengl项目。我一直在使用命令行编译这个命令:
g++ `pkg-config --cflags glfw3` -o test test.cpp Third_Party/glError.cpp Third_Party/glUtil.cpp Third_Party/gl_core_4_3.cpp Third_Party/glTexture.cpp Third_Party/glShader.cpp `pkg-config --static --libs glfw3` -std=c++11
我想改用cmake,所以我创建了这个文件:
cmake_minimum_required(VERSION 3.2)
project(openGLTest)
add_definitions(-std=c++11)
set(CMAKE_CXX_STANDARD 11)
set(CMAKE_BUILD_TYPE Release)
add_executable(openGLTest test.cpp Third_Party/glError.cpp Third_Party/glUtil.cpp Third_Party/gl_core_4_3.cpp Third_Party/glShader.cpp Third_Party/glTexture.cpp)
find_package(PkgConfig REQUIRED)
pkg_search_module(GLFW REQUIRED glfw3)
include_directories(${GLFW_INCLUDE_DIRS})
target_link_libraries(openGLTest ${GLFW_STATIC_LIBRARIES})
当我通过命令行编译并运行测试时,项目运行正常。但是当我使用cmake编译并运行openGLTest时,我收到了这个错误:
terminate called after throwing an instance of 'std::length_error'
what(): basic_string::_S_create
Aborted (core dumped)
为什么会发生这种情况,我该怎么做才能解决它?
答案 0 :(得分:0)
1.- add_definitions(-std = c ++ 11),这里错了,因为add_definitions不适用于此。请参阅cmake-compile-features的底部示例,以便了解enable propertyly c ++ 11的功能。
2.- 但是当我使用cmake 编译并运行openGLTest时,我没有看到使用cmake创建的运行或测试目标,你是否错过了CMakeLists.txt中的那部分代码? / p>
我的解决方案是,发布完整的CMakeLists.txt和/或清除cmake生成的缓存文件并再次构建。查看配置和构建时间是否输出错误或警告。