VScode和cmake的组合拳

Posted ^江流儿^

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了VScode和cmake的组合拳相关的知识,希望对你有一定的参考价值。

cmake的基本使用以及cmake和vscode中launch.json,tasks.json的组合拳

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的常见使用场景

  • 单个文件外部编译:
    最简单的一种情况:文件目录结构如下所示:

    文件中仅有一个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文件需要编译,考虑下面一种情况,文件目录如下所示:

    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

以上是关于VScode和cmake的组合拳的主要内容,如果未能解决你的问题,请参考以下文章

vscode发现不了cmake宏

VSCode c++和CMake环境搭建(for Mac OS)

VSCode c++和CMake环境搭建(for Mac OS)

B站视频教程笔记基于VSCode和CMake实现C/C++开发 | Linux篇(gcc/g++)(安装配置使用详细教程)(VSCode教程)(CMake教程)(精!)

04-vscode搭建cmake的编译环境

将vscode打造成无敌的IDE(11) vscode增加文件后缀类型的支持,例如cmake支持识别cmake.in