代码笔记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

posted @ 2022-05-07 15:46  The1912  阅读(1108)  评论(0编辑  收藏  举报