VSCODE+CMAKE+Libtorch环境配置,实现一键编译一键DEBUG

VSCODE+CMAKE+Libtorch环境配置,实现一键编译一键DEBUG


记录一下配置vscode+camke并引入第三方深度学习库libtorch实现一键编译一键cmake的过程。首先vscode和cmake,libtorch作为实例如何引用第三方库。主要参考了vscode的官方文档,如果不需要配置cmake而是直接调用g++这种的话可以直接看官方的文档 C/C++ for Visual Studio Code,不过好像是英文的你要是嫌麻烦也可以看我的,过程都是一样的不过是把cmake的命令换成g++的命令。

配置vscode的C++环境主要是要配置c_cpp_properties.json、tasks.json、launch.json三个json文件,三个文件分别控制C++特性,编译的选项以及DEBUG的选项。下面我们就按顺序配置这三个文件,不过首先新建一个hello world.cpp来方便我们配置。

1. 新建helloworld.cpp

用vscode打开一个文件夹并创建一个helloworld.cpp文件。这一步主要是方便后面配置文件。可以在.cpp中输出梦的开始:

#include<iostream>

void main()
{
    std::cout << "hello, world!" << std::endl;
}

2. 配置c_cpp_properties.json文件

这一步是设置vscode中C++工程的各种属性比如头文件寻找路径,预定义等等,这里主要参考了vsvode的官方文档C/C++ for Visual Studio Code。这里我们可以采用通过UI界面或者通过直接修改json文件的方法来配置。

F1或者ctrl+shift+p(mac用户是cmd+shift+p)打开命令面板,并输入edit如下并选择C/C++:Edit Configurations(UI)C/C++:Edit Configurations(JSON)

在这里插入图片描述

如果选择C/C++:Edit Configurations(JSON)可以跳过这两步直接按照最后的json文件修改自己的json文件就行了。这里以选择**C/C++:Edit Configurations(UI)**为例,vscode会打开如下的配置界面,这里主要通过compiler path的下来菜单将编译器修改为g++就行

在这里插入图片描述

这里我们继续修改将IntelliSense mode为对应平台或者你想用的,include path默认把工作空间下的头文件都引入了,这里我们可以将我们的第三方库libtorch引入,比如我的libtorch放在/home/kb457/下,kb457是我的用户名,我就可以添加一行/home/kb457/libtorch/**。下面的Defines是放一些预定义的值,这里不需要就不填。

在这里插入图片描述

配置完成后之间关闭这个界面就会在工作空间的.vscode文件夹下生成一个c_cpp_properties.json,如果上一步选择**C/C++:Edit Configurations(JSON)**文件的可以直接按照下图修改即可。

在这里插入图片描述

{
    "configurations": [
        {
            "name": "Linux",
            "includePath": [
                "${workspaceFolder}/**",
                "/home/kb457/libtorch/**"
            ],
            "defines": [],
            "compilerPath": "/usr/bin/g++",
            "cStandard": "c11",
            "cppStandard": "c++17",
            "intelliSenseMode": "gcc-x64"
        }
    ],
    "version": 4
}

3. 配置tasks.json文件

这个文件主要是告诉vscode你摁下生成(ctrl+shift+b/cmd+shift+b)的时候应该干嘛。首先我们选中并打开刚刚创建的helloworld.cpp文件,这里一定要选中不然vscode无法知道你要对cpp生成就需要对tasks.json进行较多修改。然后我们还是打开命令面板(F1/ctrl+shift+p/cmd+shift+p)输入task,并选择Tasks: Configure Default Build Task

在这里插入图片描述

然后选择C/C++:g++ build activate file,vscode会自动在.vscode文件夹下生成使用g++编译文件的tasks.json文件。

在这里插入图片描述

生成的tasks.json文件如下,其中lable可以修改为任意的名字,command是调用的命令,args是调用时紧跟在命令后的参数,group中isDefault设为true表明为默认的生成任务。

在这里插入图片描述

如果只用g++的话无需对文件进行修改,因为我们使用cmake,所以对文件进一步修改,主要是修改commandargs如下,组成cmake .. && make -j,同时我们还要设定命令执行的工作目录,修改cwd"${workspaceFolder}/build",同时在工作空间目录下新建build文件夹用于存放生成文件,最后修改labelcmake build来方便我们后面的launch.json文件调用。这一步我们已经完成了生成任务的调试,不需要调试的话我们摁下生成vscode就会在build目录下调用cmake命令进行生产,但是由于缺少CMakeLists.txt并不会生成正确的文件,关于CMakeLists.txt怎么编写会放在最后,下面我们继续说怎么编写launch.json文件。

在这里插入图片描述

{
// 有关 tasks.json 格式的文档,请参见
    // https://go.microsoft.com/fwlink/?LinkId=733558
    "version": "2.0.0",
    "tasks": [
        {
            "type": "shell",
            "label": "cmake build",
            "command": "cmake",
            "args": [
                "..",
                "&&",
                "make",
                "-j"
            ],
            "options": {
                "cwd": "${workspaceFolder}/build"
            },
            "problemMatcher": [
                "$gcc"
            ],
            "group": {
                "kind": "build",
                "isDefault": true
            }
        }
    ]
}

4. 配置launch.json文件

同样打开命令面板输入debug然后选择DEBUG:Open launch.json:然后选择C++(GDB/LLDB)

在这里插入图片描述

选择后打开launch.json文件如下:

在这里插入图片描述

这里我们主要修改program为cmake生成的文件,这里我们假定为example,并添加preLaunchTaskmiDebuggerPath两条配置来告诉vscode在启动调试前调用生成任务和调试器所在位置。如果不添加preLaunchTask配置的话每次我们摁F5调试时不会自动生成最新的程序,需要手动生成。修改后配置如下:

在这里插入图片描述

{
    // 使用 IntelliSense 了解相关属性。 
    // 悬停以查看现有属性的描述。
    // 欲了解更多信息,请访问: https://go.microsoft.com/fwlink/?linkid=830387
    "version": "0.2.0",
    "configurations": [
        {
            "name": "g++ build and debug active file",
            "type": "cppdbg",
            "request": "launch",
            "program": "${workspaceFolder}/build/stereo",
            "args": ["--dataset=sceneflow"],
            "stopAtEntry": true,
            "cwd": "${workspaceFolder}",
            "environment": [],
            "externalConsole": false,
            "MIMode": "gdb",
            "setupCommands": [
                {
                    "description": "Enable pretty-printing for gdb",
                    "text": "-enable-pretty-printing",
                    "ignoreFailures": true
                }
            ],
            "preLaunchTask": "cmake build",
            "miDebuggerPath": "/usr/bin/gdb"
        }
    ]
}

5. 编写CMakeLists.txt

先给出我用的CMakeLists.txt。

cmake_minimum_required(VERSION 3.0 FATAL_ERROR)
project(stereo)


# SET(CMAKE_BUILD_TYPE "Debug")
SET(CMAKE_BUILD_TYPE "Release")
SET(CMAKE_CXX_FLAGS_DEBUG "$ENV{CXXFLAGS} -O0 -Wall -g2 -ggdb")
SET(CMAKE_CXX_FLAGS_RELEASE "$ENV{CXXFLAGS} -O3 -Wall")

set(CMAKE_PREFIX_PATH ${CMAKE_PREFIX_PATH} "/home/kb457/libtorch")


find_package(Torch REQUIRED)
find_package(OpenCV REQUIRED)
find_package(Boost REQUIRED COMPONENTS filesystem system)
# find_package(PythonLibs REQUIRED)

if(NOT Boost_FOUND)
    message("Not found Boost")
endif()


include_directories(${Boost_INCLUDE_DIRS})

add_executable(example helloworld.cpp)



target_link_libraries(stereo "${TORCH_LIBRARIES}" "${OpenCV_LIBS}" "${Boost_LIBRARIES}")
set_property(TARGET stereo PROPERTY CXX_STANDARD 11)

已标记关键词 清除标记
相关推荐
©️2020 CSDN 皮肤主题: 编程工作室 设计师:CSDN官方博客 返回首页