CMake和VsCode调试的使用

目录

CMake使用

CMake下载

创建系统文件目录

MakeList编写规范

VsCode启动调试

添加配置文件

添加断点,启动调试


CMake使用

CMake下载

输入指令

sudo apt install cmake

安装cmake,使用 cmake -version可查看cmake的版本信息

创建系统文件目录

系统文件目录通常分为bin、include、src、build等

 bin主要存放可执行文件

include存放头文件

src存放cpp文件

build存在makelist生成文件

MakeList编写规范

需要配置版本、目录等信息,简单配置如下:

# cmake配置

# 1、设置对cmake的最小版本
cmake_minimum_required(VERSION 3.0)

# 2、设置工程名
project(apply VERSION 12.0 DESCRIPTION "这是一个项目级别的工程")

# 3、指定需要的头文件目录
include_directories(include) # 相对于CMakeLists.txt所在的目录

# 4、获取指定目录下的所有cpp文件,用SRC_LIST变量代替
# 如果src目录下的cpp文件很多,在生成可执行文件时一个个写出来十分不便,所以可以使用这个命令方便使用
# aux_source_directory(src SRC_LIST)

# 4.1
# aux_source_directory虽然能够很方便的获取所有cpp,但是某些情况下有部分cpp不需要,此时可以使用set命令解决
# 相当于是 ./src/Math.cpp ./src/main.cpp
set(
    SRC_LIST 
    ./src/Math.cpp
    ./src/main.cpp
)

# 5、生成可执行文件,这里的所有cpp文件用变量替代
#executable 可执行的 后面放的是项目的cpp文件
add_executable(app ${SRC_LIST})

# 6、设置目标对象(可执行文件)的输出目录。即app可执行文件就会输出到bin目录中
# EXECUTABLE_OUTPUT_PATH是cmake中已定义的变量,表示目标二进制可执行文件的存放位置
# PROJECT_SOURCE_DIR 是工程根目录的变量
# set(EXECUTABLE_OUTPUT_PATH ${PROJECT_SOURCE_DIR}/bin)


编写总结如下:

# 使用动态库静态库

# 设置项目对cmake的最低要求
cmake_minimum_required(VERSION 3.25)

# 设置工程名以及版本
project(AppSO VERSION 2.1)

# 设置头文件变量,其包含所有需要的头文件。
# 第一个目录是本项目的,第二个是动态库的头文件目录,第三个是静态库头文件目录
set(headers include ../3.29.3/include ../3.29.5/include)

# 设置头文件变量到项目中
include_directories(${headers})

# 设置编译选项
add_compile_options(-Wall -std=c++11 -g)

# 设置资源变量
set(cpps src/program.cpp src/main.cpp)

# 生成指定的可执行程序
add_executable(app ${cpps})

# 情况一:libtps.so放在/usr/lib目录中
# 找到动态库,这里是已经把libtps.so放到了默认索的路径中
# TPS_LIB_VAR 相当于替换libtps.so
# find_library(TPS_LIB_VAR tps) 
# 添加动态库连接相当于g++ -l
# target_link_libraries(app ${TPS_LIB_VAR})

# 情况二:是不将动态libtps.so放到指定默认的搜索目录中
# add_library命令创建一个名为tps的目标,表示一个动态库。IMPORTED选项告诉CMake这个目标不是通过源代码编译出来的,而是外部已经编译好的目标。
# 然后使用set_target_properties命令设置tps目标的属性,其中IMPORTED_LOCATION属性指定了动态库文件的路径。
# 最后,target_link_libraries命令将动态库链接到app可执行文件中。命令如下:
# add_library(tps_obj SHARED IMPORTED)
# set_target_properties(tps_obj PROPERTIES IMPORTED_LOCATION /home/yoyo/workspaces/cmakes/3.29.3/build/libtps.so)
# target_link_libraries(app tps_obj)

# 情况三:与情况二相同,只是操作方式不同
find_library(TPS_LIB_VAR_ tps HINTS /home/yoyo/workspaces/cmakes/3.29.3/build/)
# 第二个目录是静态库文件(静态库比较简单,直接写就行)前面是动态库 后面这个目录是静态库
set(libs ${TPS_LIB_VAR_} /home/yoyo/workspaces/cmakes/3.29.5/build/libstps.a)

# 连接所有的库
target_link_libraries(app ${libs})

# 设置可执行程序的输出目录
set_target_properties(app PROPERTIES
    RUNTIME_OUTPUT_DIRECTORY "../bin"
)

编写完成后进入到build文件,使用cmake ../指令就会找到Cmakelist.txt文件之后就会将一系列文件生成到build文件夹。使用make生成可执行文件,之后app会生成在bin目录下。

VsCode启动调试

添加配置文件

在运行文件夹中点击添加配置,需要配置launch.json和tasks.json文件。

tasks.json文件配置如下

{
	"version": "2.0.0",
	"tasks": [
        {
            "label": "cmake",
            "type": "shell",
            "command": "cmake",
            "args": [
                "../"
            ],
            "options": {
                "cwd": "${fileDirname}/build"
            },            
        },
        {
            "label": "make",
            "type": "shell",
            "command": "make",
            "args": [],
            "options": {
                "cwd": "${fileDirname}/build"
            }, 
        },
        {
            "label": "build",
            "dependsOn":["cmake", "make"]
        },
    ],
}

可以看出,上面的 tasks.json 文件主要包含三个命令:

label为cmake的任务:执行shell类型的cmake命令,其参数为 ../,执行时所在的目录为${fileDirname}/build。这个命令等价于在build目录下执行cmake ../
label为make的任务:执行shell类型的make命令,没有参数,执行时所在的目录为${fileDirname}/build。这个命令等价于在build目录下执行make
label为build的任务:该任务由cmake和make任务组成,也就是将上面两条命令执行的过程组合成一个build任务。

之后编写launch.json文件

{
    "version": "0.2.0",
    "configurations": [
        {
            "name": "g++ - Build and debug active file", //配置文件名称 可任意取
            "type": "cppdbg", //调试类型
            "request": "launch", //配置文件请求类型
            "program": "${workspaceFolder}/build/app", //可执行文件的路径和名称 ${workspaceFolder}代表当前的工作目录
            "args":[], //主函数传入参数
            "stopAtEntry": false, //设为true时程序将暂停在程序入口处
            "cwd": "${workspaceFolder}",//运行目录 也就是makelist常在目录
            "environment": [], //配置依赖的静态库和动态库环境目录
            "externalConsole": false,
            "MIMode": "gdb", //使用gdb调试
            "setupCommands": [
                {
                    "description": "Enable pretty-printing for gdb",
                    "text": "-enable-pretty-printing",
                    "ignoreFailures": true
                }
            ],
            "preLaunchTask": "build", // //调试会话时开始执行的文件,一般为编译文件,与tasks.json的label一致
            "miDebuggerPath": "/usr/bin/gdb" //调试工具所在位置
        }
    ]
}

添加断点,启动调试

点击f5之后运行然后进行调试工作即可。 

  • 4
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值