代码笔记5 关于vscode中的cmake工程编译通过后无法运行代码的问题,以及GDB调试可执行文件
1
令人头疼的事就是时常发生。之前用vscode编译cmake工程时,cmake完了,编译也通过了,可执行文件也产生了,可vscode就是识别不到可运行文件,真是令人头大。如果直接运行就会报错
[cms-driver] Found no matching code model for the current build type. This shouldn't be possible
[cms-driver] Found no matching code model for the current build type. This shouldn't be possible
[cms-driver] Found no matching code model for the current build type. This shouldn't be possible
我看百度基本上没有说为什么的。我就上了bing找,最奇葩的事github上也没有,最终在一个韩文页面找到了办法[1]
2
解决办法就是不要在一开始编译中就设置CMAKE_BUILD_TYPE
而是将它注释掉
cmake_minimum_required(VERSION 2.8)
project(vo1)
set(CMAKE_CXX_COMPILER g++)
# set(CMAKE_BUILD_TYPE "Release")
add_definitions("-DENABLE_SSE")
set(CMAKE_CXX_FLAGS "-std=c++11 -O2 ${SSE_FLAGS} -g -march=native")
list(APPEND CMAKE_MODULE_PATH ${PROJECT_SOURCE_DIR}/cmake)
再重新编译就好了
3
至于是什么原因,我就先谷歌翻译那位韩国大神说的,我也不太明白。
我试了一下谷歌,发现生成的可执行文件不是CMake Tools期望的版本类型,所以无法运行。也就是说,我基本上预计是Debug类型的,但是因为有Release类型的可执行文件,所以出现了问题。
CMake Tools中有一个概念,即CMake Variants,在进行配置之前可以预先指定并选择哪些构建选项?什么是一样的(;)有关CMake Variant的详细信息,请参见此处。这里重要的是CMake Variants预先指定了构建类型,因此CMakeLists与之不同的构建类型。如果指定给txt,则CMakeLists。虽然在txt中可以构建为指定的其他类型,但不能使用快捷键(Shift+F5)执行。(在TERMINAL中运行。)
只是CMakeList如果在txt中未设置CMAKE BUILD TYPE,则按照CMake Variants的首选项构建为Debug类型,并以快捷方式运行。但是Debug类型真的是调试时才使用的,一般工作时使用Release类型速度更快,可以更快地查看结果。首先为了确认构建类型CMakeLists修改txt如下:构建类型设置首先进行注释。
4
这里说一个今天学到的笔记,就是在linux系统下,使用gdb来调试可执行文件,可能就不需要IDE了,虽然很麻烦,在此MARK一下[2]
References
[1]https://goodgodgd.github.io/ian-flow/archivers/vscode-tutorial
[2]https://blog.csdn.net/qq_35551407/article/details/114710398?spm=1001.2014.3001.5506