之前的 linux下vscode配置c++,使其和Visual Studio2019一样调试文章和本篇类似,配置vscode使其和vs2019进行调试和编译,但是之前的文章不是很实用,是通过命令行的形式进行配置的,这样的方法针对小工程还好,如果是复杂很大的工程就显得很复杂了,那么有没有更好的方法呢?答案是有,这里大家可以参考官网的文章,官网的例子很简单,我这里是比较复杂的项目,同时也会讲解的配置过程中遇到的问题。

1.ubuntu下的cmake版本问题

        之所以说这个问题,等后面我们都配置好了,会发现有时候无法调试多层文件夹的源文件,报的错误是低版本不支持错误解释在这里,需要cmake版本大于3.7.2以后才会支持,因此这里需要大家确定自己的版本。

ubuntu@ubuntu-PowerEdge-R730:~$ cmake --version
cmake version 3.21.4


如果版本没有大于3.7的需要卸载cmake然后安装更高的版本,点击这里下载cmake,下载完成后,放到ubuntu下安装:

下载安装包好,直接解压即可,然后创建软连接即可

 

 重新打开一个终端查看cmake版本:cmake --version

下面就可以配置vscode了

2.VScode配置

2.1  vscode的cmake配置

        这里默认了已经安装了vscode的c++相关插件和cmake工具等插件,先配置cmake配置,打开文件-->首选项-->设置-->用户-->扩展-->CMake Tools-->Cmake:Cmake Path把在linux重新安装的cmake的位置添加进来如:

同理远程也要修改:

2.2 C++环境配置

 完成上面的基本配置后,就可以配置c++环境了,可以直接按照官方的教程来:

创建一个 CMake 项目#

如果您的现有 CMake 项目CMakeLists.txt在根目录中已有文件,则可以跳至选择套件以配置现有项目。

否则,为新项目创建一个文件夹。在终端窗口中,创建一个名为 的空文件夹cmakeQuickStart,导航到其中,然后通过输入以下命令在该文件夹中打开 VS Code:

mkdir cmakeQuickStart
cd cmakeQuickStart
code .

code .命令会在当前工作文件夹中打开 VS Code,该文件夹将成为您的“工作区”。

创建一个 CMake hello world 项目#

CMake 工具扩展可以为您创建基本 CMake 项目的文件。打开命令面板 ( Ctrl+Shift+P ) 并运行CMake:快速启动命令:

创建 CMake 快速入门

输入项目名称。这将被写入CMakeLists.txt和一些初始源文件。

接下来,选择Executable作为项目类型以创建main.cpp包含基本main()功能的基本源文件 ( ) 。

选择项目类型

注意:如果您想创建一个基本的源文件和头文件,您应该选择Library。但是对于本教程,Executable就可以了。如果系统提示您为文件夹配置 IntelliSense,请选择允许

这将创建一个 hello world CMake 项目main.cppCMakeLists.txt其中包含, (告诉 CMake 工具如何构建您的项目)和一个以build您的构建文件命名的文件夹:

项目内容

选择套件#

在您可以使用 CMake 工具扩展来构建项目之前,您需要对其进行配置以了解系统上的编译器。通过扫描“套件”来做到这一点。工具包代表一个工具链,它是用于构建项目的编译器、链接器和其他工具。扫描试剂盒:

  1. 打开命令面板 ( Ctrl+Shift+P ) 并运行CMake: Select a Kit。该扩展程序将自动扫描您计算机上的工具包并创建在您的系统上找到的编译器列表。

  2. 选择要使用的编译器。例如,根据您安装的编译器,您可能会看到如下内容:

    选择套件

配置 Hello World #

您必须做两件事来配置您的 CMake 项目:选择一个工具包(您刚刚完成)和选择一个变体。

您之前选择的套件显示在状态栏中。例如:

状态栏中的选定套件

要更改套件,您可以单击状态栏中的套件,或运行CMake:再次从命令面板中选择套件命令。如果您没有看到您正在寻找的编译器,您可以cmake-tools-kits.json在您的项目中编辑该文件。要编辑文件,请打开命令面板 ( Ctrl+Shift+P ) 并运行CMake:Edit User-Local CMake Kits命令。

选择一个变体#

变体包含有关如何构建项目的说明。默认情况下,CMake的工具扩展提供四种变体,每一个对应于默认生成类型:DebugReleaseMinRelSize,和RelWithDebInfo。这些选项执行以下操作:

Debug:禁用优化并包含调试信息。 Release:包括优化但没有调试信息。 MinRelSize:优化尺寸。没有调试信息。 RelWithDebInfo:优化速度并包含调试信息。

要选择变体,请打开命令面板 ( Ctrl+Shift+P ) 运行CMake: Select Variant命令。

选择变体

选择调试以在您的构建中包含调试信息。

选择调试变体类型

选定的变体将出现在活动套件旁边的状态栏中。

CMake:配置#

现在您已经选择了一个套件和一个变体,打开命令面板 ( Ctrl+Shift+P ) 并运行CMake:Configure命令来配置您的项目。这将使用您选择的工具包和变体在项目的构建文件夹中生成构建文件。

构建helloword#

配置项目后,您就可以开始构建了。打开命令面板 ( Ctrl+Shift+P ) 并运行CMake: Build命令,或从状态栏中选择Build按钮。

建造

您可以通过从命令面板中选择CMake: Set Build Target来选择要构建的目标。默认情况下,CMake 工具会构建所有目标。选定的目标将出现在“构建”按钮旁边的状态栏中。

调试helloword#

要运行和调试您的项目,请打开main.cppstd::cout在行上放置一个断点。然后打开命令面板(Ctrl+Shift+P)并运行CMake: Debug。调试器会停在这一std::cout行:

调试

继续并按F5继续。

2.3 多文件夹和多工程进行环境配置

 下面看看我的文件结构

 其中build是自动创建的,CMakeLists.txt也是自动创建的,src里存在大量的源文件即.cpp文件,我们需要做的就是修改根目录下的CMakeLists.txt和创建src目录下的CMakeLists.txt,其实这些操作和前面cmake系列一样的操作,这里简要说明不懂的请看我的cmake使用教程系列,先看看根目录下的CMakeLists.txt

cmake_minimum_required(VERSION 3.7.2)
project(main VERSION 0.1.0)

include(CTest)
enable_testing()

# 查找opencv的path
find_package(OpenCV REQUIRED)
# 打印opencv的相关信息
message(STATUS "OpenCV library status:")
message(STATUS "    version: ${OpenCV_VERSION}")
message(STATUS "    libraries: ${OpenCV_LIBS}")
message(STATUS "    include path: ${OpenCV_INCLUDE_DIRS}")

# 添加子目录,该目录为库目录,会调用子目录的cmake文件,进行构建库
add_subdirectory(src)


add_executable(main main.cpp)

# 添加链接库
target_link_libraries(main TrafficLightRecognition ${OpenCV_LIBS})

set(CPACK_PROJECT_NAME ${PROJECT_NAME})
set(CPACK_PROJECT_VERSION ${PROJECT_VERSION})
include(CPack)

 其中有注释的是我添加的,没有注释的是自动添加的,添加的命令主要是为了构建src的库文件,然后链接即可,src的就和前面的教程一样了,这里不再赘述,至此vscode配置结束:

# 获取本目录下的所有文件的列表
aux_source_directory(. DIR_LIB_SRCS)
# 设置c++11进行编译,如果使用了c++11的预研特性,必须写这个命令,否则报错
SET( CMAKE_CXX_FLAGS "-std=c++11 -O3")
# 通过如下命令获取opencv的相关信息,这里不采用这样的方式,采用添加目录的方式,这样增加方法的多样性
find_package(OpenCV REQUIRED)
# message(STATUS "OpenCV library status:")
# message(STATUS "    version: ${OpenCV_VERSION}")
# message(STATUS "    libraries: ${OpenCV_LIBS}")
# message(STATUS "    include path: ${OpenCV_INCLUDE_DIRS}")
# include_directories(${OpenCV_INCLUDE_DIRS})
link_libraries(${OpenCV_LIBS})

# 安装opencv时我们是可以知道opencv安装的位置的如:/usr/local/include
# 我这里的的源文件也依赖了matlab的运行库,因此也把头文件加载进来了
include_directories(/usr/local/MATLAB/MATLAB_Runtime/v96/extern/include /usr/local/include)
# 把对应的库文件目录也添加进来,这里添加库目录的目的是生成的静态库需要
link_directories(/usr/local/lib /usr/local/MATLAB/MATLAB_Runtime/v96/extern/bin/glnxa64  /usr/local/MATLAB/MATLAB_Runtime/v96/extern/lib/glnxa64)


# 指定编译库输出的位置,这个可以设置也可以不设置
set(LIBRARY_OUTPUT_PATH lib)
# 生成动态库
add_library(TrafficLightRecognition SHARED ${DIR_LIB_SRCS})

# 生成静态库
add_library(TrafficLightRecognition_static STATIC  ${DIR_LIB_SRCS}) 

# 想要生成动态库和静态库相同名称的的库文件,则需要一个指令set_target_properties
# 这里只是通过重新命名的方法使其名字相同的,构建时还需不能相同
set_target_properties(TrafficLightRecognition_static PROPERTIES OUTPUT_NAME "TrafficLightRecognition")

# 这里为了完整也把安装的命令写了上去,这没使用到他
# 安装共享库和头文件
# 将动态库和静态库安装到<prefix>/lib
install(TARGETS TrafficLightRecognition TrafficLightRecognition_static LIBRARY DESTINATION lib ARCHIVE DESTINATION lib)
# 安装头文件
install(FILES traffic_light_recognition.h DESTINATION include)

下面看看调试的过程:

ctrl+shift+p:输入cmake:debug

 

Logo

更多推荐