1. 程式人生 > 其它 >程式碼筆記5 關於vscode中的cmake工程編譯通過後無法執行程式碼的問題,以及GDB除錯可執行檔案

程式碼筆記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