Ubuntu使用cmake和vscode开发自己的项目,引用自己的头文件和openCV

创建文件夹

复制代码
mkdir my_proj

继续创建include 和 src文件夹,形成如下的目录结构

用vscode打开项目

创建add.h

cpp 复制代码
#ifndef ADD_H
#define ADD_H
 
int add(int numA, int numB);
 
#endif

add.cpp

cpp 复制代码
#include "add.h"
 
int add(int numA, int numB)
{
    return numA + numB;
}

main.cpp

cpp 复制代码
#include <iostream>
#include "add.h"
 
int main()
{
   std::cout << "numA + numB = " << add(10,20) <<std::endl;
   return 0;
}

形成这样的目录结构

在my_proj中创建CMakeLists.txt,写入如下内容

cpp 复制代码
cmake_minimum_required(VERSION 2.8)

project(test)

set( CMAKE_BUILD_TYPE "Debug" )

include_directories(./include)

set(SRC_LIST ./src/add.cpp ./src/main.cpp)

add_executable(main ${SRC_LIST})

BUILD_TYPR 设置为Debug可以打断点调试

在my_proj中创建build.sh,写入如下内容

cpp 复制代码
mkdir build
cd build
cmake ..
make

修改build.sh文件的权限

cpp 复制代码
chmod +x build.sh

运行build.sh

在build文件夹中,会生成一个main的可执行程序,将它的路径记下来

在vscode中ctrl+shift+d 创建一个launch.json,将刚才的main的可执行程序的路径复制到"program":

cpp 复制代码
{
  "version": "0.2.0",
  "configurations": [
    {
      "name": "(gdb) Launch",
      "type": "cppdbg",
      "request": "launch",
      "program": "/home/robotics/my_proj/build/main",
      "args": [],
      "stopAtEntry": false,
      "cwd": "${fileDirname}",
      "environment": [],
      "externalConsole": false,
      "MIMode": "gdb",
      "setupCommands": [
          {
              "description": "Enable pretty-printing for gdb",
              "text": "-enable-pretty-printing",
              "ignoreFailures": true
          },
          {
              "description": "Set Disassembly Flavor to Intel",
              "text": "-gdb-set disassembly-flavor intel",
              "ignoreFailures": true
          }
      ]
    }
  ]
}

c_cpp_properties.json这样写

cpp 复制代码
{
    "configurations": [
        {
            "name": "linux-gcc-x64",
            "includePath": [
                "${workspaceFolder}/**",
                "${workspaceFolder}/include"
            ],
            "compilerPath": "/usr/bin/gcc",
            "cStandard": "${default}",
            "cppStandard": "${default}",
            "intelliSenseMode": "linux-gcc-x64",
            "compilerArgs": [
                ""
            ]
        }
    ],
    "version": 4
}

然后就可以打上断点调试了

如果想要引用openCV,CMakeLists.txt中这样写

复制代码
find_package( OpenCV REQUIRED )
include_directories(./include
${OpenCV_INCLUDE_DIRS} 
)
target_link_libraries( main ${OpenCV_LIBS} )

vscode 中ctrl+shift+p创建task.json,写入如下内容

bash 复制代码
{
    "version": "2.0.0",
    "tasks": [
        {
            "label": "build",
            "type": "shell",
            "command": "./build.sh",
            "group": {
                "kind": "build",
                "isDefault": true
            }
        }
    ]
}

就可以在vscode中ctrl+shift+b 运行build.sh文件,不必在Terminal中运行了。

编译完成后按F5运行程序

相关推荐
怀旧,7 小时前
【Linux网络编程】2. Socket编程 UDP
linux·网络·udp
徒劳爱学仙7 小时前
全志 V821 韦东山 Avaota-F1-B ubuntu开发环境搭建
linux·运维·ubuntu
z200509307 小时前
【linux学习】linux的基本指令
linux·学习
迷枫7127 小时前
Linux 磁盘管理全攻略:从物理硬件到在线扩容
linux
java_logo9 小时前
轻量AI接口网关一键部署|calciumion/new-api Windows/Linux Docker 部署全教程
linux·人工智能·windows·one api·calciumion·ai网关部署·one api 部署
原来是猿9 小时前
Linux - 【理解进程组、会话与作业控制】
linux·运维·服务器
怀旧,9 小时前
【Linux网络编程】1. 网络基础概念
linux·网络
怀旧,10 小时前
【Linux网络编程】5. 应用层协议 HTTP
linux·网络·http
SurpriseDPD10 小时前
Linux 内核基础知识:READ_ONCE、内存屏障与指令重排
linux·系统架构