首页 > 其他分享 >VScode和cmake的组合拳

VScode和cmake的组合拳

时间:2023-01-17 18:33:34浏览次数:55  
标签:cmake VScode eg add cpp CMAKE main 组合拳

cmake的基本使用


1. cmake的常用指令

cmake是一个跨平台的安装编译软件,可以用简单的语法规则描述所有平台的安装编译过程,下面介绍cmake的常用指令

  • cmake_minimum_required 用于指定CMake要求的最低版本
    eg:
    cmake_minimum_required(VERSION 3.10)
    

  • project用于定义工程的名称并指定工程支持的语言
    eg:
    project(HELLOWORD CXX)
    

  • set用于定义变量
    eg:
    set(SOURCE main.cpp)
    

  • include_directories添加工程需要的头文件
    eg:
    include_directories(./include ./include2 ./include3) 
    

  • link_directories用于向工程中添加多个特定的库文件搜索路径
    eg:
    link_directories(./lib ./lib1 ./lib2)
    

  • add_library生成库文件
    eg:
    add_library(hello SHARED/STATIC helper.cpp helper2.cpp)
    

  • add_compile_options添加编译参数
    eg:
    add_compile_options(-Wall -std=c++11 -w -o2)
    

  • add_executable生成可执行文件
    eg:
    add_executable(main main.cpp)
    

  • target_link_libraries为target添加需要连接的共享库文件
    eg:
    target_link_libraries(main hello)
    

  • add_subdirectory添加子目录
    eg:
    add_subdirectory(./src)
    

  • aux_source_directory发现目录下是所有源文件
    eg:
    aux_source_directory(./src srccpp)
    add_executable(main ${srccpp})
    


2. cmake的常用变量

  • CMAKE_C_FLAGS gcc编译选项
  • CMAKE_CXX_FLAGS g++编译选项
    eg:
    set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11 -o2 -w ")
    

  • CMAKE_BUILD_TYPE 编译选项
    eg:
    set(CMAKE_BUILD_TYPE Release/Debug)
    

3. cmake的常见使用场景

  • 单个文件外部编译:
    最简单的一种情况:文件目录结构如下所示:
    image
    文件中仅有一个mian.cpp
    cmake编写如下:
cmake_minimum_required(VERSION 3.10)
project(HELLOCMAKE)
add_compile_options(-w -o2)
add_executable(compile_with_cmake main.cpp)

shell执行如下:

mkdir build
cd build
cmake ..
make
  • 多文件外部编译
    考虑复杂一点的情况,通常我们有多个cpp文件需要编译,考虑下面一种情况,文件目录如下所示:
    image
    cmake编写如下:
    cmake_minimum_required(VERSION 3.10)
    project(HELLOCMAKE2)
    include_directories(include)
    aux_source_directory("${CMAKE_SOURCE_DIR}/src" srccpp)
    add_compile_options(-std=c++11 -o2 -w)
    add_executable(main_with_cpp main.cpp ${srccpp})
    
    shell执行如下:
    mkdir build
    cd build
    cmake ..
    make
    
    考虑更复杂一点的情况,我们可以将以来源文件打包成库文件
    cmake_minimum_required(VERSION 3.10)
    project(HELLOCMAKE)
    add_compile_options(-std=c++11 -o2)
    include_directories(${CMAKE_SOURCE_DIR}/include)
    add_library(srclib STATIC ${CMAKE_SOURCE_DIR}/src/helper.cpp)
    link_directories(${CMAKE_SOURCE_DIR}/build)
    link_libraries(srclib)
    add_executable(main main.cpp)
    
    或者打包成动态库
    cmake_minimum_required(VERSION 3.10)
    project(HELLOCMAKE)
    add_compile_options(-std=c++11 -o2)
    include_directories(${CMAKE_SOURCE_DIR}/include)
    add_library(srclib SHARED ${CMAKE_SOURCE_DIR}/src/helper.cpp)
    link_directories(${CMAKE_SOURCE_DIR}/build)
    # link_libraries(srclib)
    add_executable(main main.cpp)
    target_link_libraries(main srclib)
    
    考虑更复杂一点的情况,我们可以在子文件中添加cmake,在主文件夹中使用add_subdirectories进行合并
    主文件Cmake
    cmake_minimum_required(VERSION 3.10)
    project(HELLOCMAKE)
    add_subdirectory(src)
    link_directories(src)
    link_libraries(srclib)
    include_directories(include)
    add_executable(main main.cpp)
    
    子文件Cmake
    add_compile_options(-std=c++11 -o2)
    include_directories(${CMAKE_SOURCE_DIR}/include)
    add_library(srclib STATIC helper.cpp)
    

4. VSCODE和CMAKE的组合拳

vscode本身只是个编辑器,他的编译和调试功能由额外安装的编译器和调试器支持,在.vscode文件中,通过配置launch.json 和tasks.json进行编辑器和调试器的调用

  • 调试cmake编译完成文件的注意点
    • 首先需要将program选项指定到编译好的可执行文件的为止
    • 其次配置prelaunchTask进行自动编译,避免每次调试都手动编译,
      具体代码如下:
    {
    // 使用 IntelliSense 了解相关属性。 
    // 悬停以查看现有属性的描述。
    // 欲了解更多信息,请访问: https://go.microsoft.com/fwlink/?linkid=830387
    "version": "0.2.0",
    "configurations": [
        {
            "name": "Launchfdgsd",
            "cwd": "${workspaceFolder}",
            "request": "launch",
            "type":"cppdbg",
            "program" : "/home/program/build/main_cpp",
            "preLaunchTask":"mybuild"
        },
    ]
    }
    
    • tasks.json 对prelaunchTask指定的任务进行定义,具体如下:
    {
    "tasks": [
        {
            "type": "shell",
            "label": "cmake",
            "command": "cmake",
            "args": [
                ".."
            ],
            "options": {
                "cwd":"${workspaceFolder}/build"
            },
        },
        {
            "type": "shell",
            "label": "make",
            "command":"make",
            "args": [],
            "options": {
                "cwd": "${workspaceFolder}/build"
            }
        },
        {
            "label": "mybuild",
            "dependsOn":["cmake","make"]
        }
    ],
    "version": "2.0.0"
    }
    

本文是我在参考了b站up主的视频后写的学习记录,链接为:https://www.bilibili.com/video/BV1fy4y1b7TC/?spm_id_from=333.337.search-card.all.click&vd_source=f2f6059a5dbe8f2c10ef6c9ab70b57d6

标签:cmake,VScode,eg,add,cpp,CMAKE,main,组合拳
From: https://www.cnblogs.com/hhyandcpp/p/17058430.html

相关文章

  • VSCode Git 使用 GPG
    1.GPG安装Linux包管理器安装即可,Windows可在如下链接下载。下载链接:www.gnupg.orgWindows下推荐:https://gpg4win.org/download.html2.GPG使用#gpg--full-ge......
  • Vue3 (Vscode插件)
    前端开发的编辑器有很多种如DW,hubilder,WebStorm,sublime,vscode,等等。​​Vue3+vite+Ts+pinia+实战+源码+全栈_哔哩哔哩_bilibili​​ 视频教程随着VsCode开......
  • 【VSCode】vue文件保存时自动格式化
    用户目录下:AppData\Roaming\Code\User\settings.json1{2"workbench.colorTheme":"DefaultDark+",3"workbench.iconTheme":"vscode-icons",4"bracket......
  • VScode 的远程开发
    VScode登录服务器后进行编码和调试,VScode上的所有功能都可以使用,和在本地开发基本无区别。一、配置免密远程登录因为是要远程登录,那么需要通过使用ssh进行密钥对登录,......
  • vscode嵌入式开发配置
    背景虽然vscode提供了许多嵌入式开发插件,但是质量参差不齐,所以本人大多是情况下依旧还是保留着:嵌入式IDE+VSCode并行的开发模式,VSCode纯粹作为代码编辑器。而VSCode只需要......
  • VSCode 连接 JumpServer 资产
    概述本文主要介绍如何通过VisualStudioCode(以下简称VSCode)的Remote-SSH插件直连JumpServer所纳管的Linux-SSH协议资产,从而进行远程开发。VSCode是一个运行于Mac......
  • https://github.com/Abraham423/CenterPointTensorRT 的cmake
    ​​link​​cmake_minimum_required(VERSION2.8.3)project(centerpoint)set(USE_CUDATrue)#ForTensorRTsamplelib#set(TRT_ROOT/home/wanghao/Desktop/projects/T......
  • cmake 检测Boost库
    ​​link​​#setminimumcmakeversioncmake_minimum_required(VERSION3.5FATAL_ERROR)#projectnameandlanguageproject(recipe-08LANGUAGESCXX)set(CMAKE_CXX_S......
  • cmake 检测Eigen库
    ​​代码在git​​cmake_minimum_required(VERSION3.9FATAL_ERROR)project(recipe-07LANGUAGESCXX)set(CMAKE_CXX_STANDARD11)set(CMAKE_CXX_EXTENSIONSOFF)set(CMAKE......
  • cmake --build 与 make
    为什么不直接make,而是使用cmake--build形式的命令,主要是为了跨平台,使用这种形式后,不管你是使用的什么生成器,CMake都能正确构建,否则如果使用的是Ninja或者其他生成器,......