VSCODE+CMAKE+Libtorch环境配置,实现一键编译一键DEBUG
reference:https://blog.csdn.net/ha_ku/article/details/102625837
文章目录
记录一下配置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。
this is important!!!!!!!!!!!!!!!!!!!!!!!!!1111
然后选择C/C++:g++ build activate file,vscode会自动在.vscode文件夹下生成使用g++编译文件的tasks.json文件。
生成的tasks.json文件如下,其中lable可以修改为任意的名字,command是调用的命令,args是调用时紧跟在命令后的参数,group中isDefault设为true表明为默认的生成任务。
如果只用g++的话无需对文件进行修改,因为我们使用cmake,所以对文件进一步修改,主要是修改command和args如下,组成cmake .. && make -j
,同时我们还要设定命令执行的工作目录,修改cwd为"${workspaceFolder}/build"
,同时在工作空间目录下新建build文件夹用于存放生成文件,最后修改label为cmake 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,并添加preLaunchTask和miDebuggerPath两条配置来告诉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)
Visual Studio Code(VS Code) 配置 C/C++ 环境常见问题及解决方案
https://blog.csdn.net/Goo_12138/article/details/83380859
整理:Visual Studio Code (vscode) 配置C、C++环境/编写运行C、C++(主要Windows、简要Linux)
https://blog.csdn.net/bat67/article/details/76095813
Visual studio code配置c++的运行环境中,出现launch:program'-路径-'does not exist
https://blog.csdn.net/YoungXinLer/article/details/81393343?utm_source=blogxgwz8#commentBox