我有一個C++,opengl項目。我一直在使用命令行使用此命令編譯:Cmake vs命令行:錯誤Cmake,不在命令行中
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})
當我編譯和命令行運行測試通,該項目運行良好。但是,當我編譯和運行openGLTest使用cmake,我得到這個錯誤:
terminate called after throwing an instance of 'std::length_error'
what(): basic_string::_S_create
Aborted (core dumped)
爲什麼會出現這種情況,我能做些什麼來解決這個問題?
'CMAKE_BUILD_TYPE'等於* Release *可能會添加額外的編譯/鏈接器標誌。您可能會看到完整的編譯行,使用'make V = 1'。這些附加標誌通常不會中斷正確的**程序,所以遇到問題通常意味着你的程序不正確。例如,它使用一些導致*未定義行爲*的行爲。 – Tsyvarev
這對我來說有點不清楚。你是否說有一個錯誤不會被命令行程序捕獲,而是被cmake程序捕獲? – dan
'有沒有被命令行程序捕獲的錯誤,但被cmake程序捕獲?' - 是的,完全是這樣。更確切的說,這是一些錯誤,它不是通過編譯一些標誌集合來捕獲的,而是被其他一組編譯器標誌捕獲到的。 – Tsyvarev