Cmake vs命令行:Cmake出错,而不是命令行

时间:2016-04-09 19:52:23

标签: c++ opengl cmake glfw

我有一个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)

为什么会发生这种情况,我该怎么做才能解决它?

1 个答案:

答案 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生成的缓存文件并再次构建。查看配置和构建时间是否输出错误或警告。