VSCode + CMake

参考文献:

  1. 如何用 GCC, CMake 和 Make 编译C/C++代码
  2. Windows 上的 Linux 子系统:WSL
  3. WSL:桌面 UI + 远程连接 RDP + 配置 VScode

文章目录

CMake 配置

编写如下的 CmakeLists.txt,设置文件之间的链接关系,

python 复制代码
cmake_minimum_required(VERSION 3.10)

project(PQC VERSION 1.0 LANGUAGES CXX)

set(CMAKE_CXX_COMPILER "g++")
set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
set(CMAKE_BUILD_TYPE Debug) 								# Debug, Release

include_directories(SYSTEM)
link_directories(SYSTEM)

set(EXECUTABLE_OUTPUT_PATH ${PROJECT_SOURCE_DIR}/bin) 		# 配置执行文件目录
set(LIBRARY_OUTPUT_PATH ${PROJECT_SOURCE_DIR}/lib/)			# 配置库文件目录

add_compile_options(
    -march=native -O3 -maes -mavx2 -fPIC
    -w -Wl,--no-as-needed,-lprofiler,--as-needed
)

link_libraries(stdc++ m ssl crypto profiler)				# 在所有编译指令中添加这些链接库

set(PATH_KEM ${PROJECT_SOURCE_DIR}/kem)						# 源文件目录
set(PATH_TEST ${PROJECT_SOURCE_DIR}/test)					# 测试文件目录

file(GLOB SRC_KEM CONFIGURE_DEPENDS ${PATH_KEM}/*.cpp)		# 找到全部的源文件

add_library(kem_128 SHARED ${SRC_KEM})						# 根据全部的源文件,构造出库文件
target_compile_definitions(test_128 PUBLIC SAFETY=128)		# 配置宏,编译出不同的可执行文件

add_executable(test_128 ${PATH_TEST}/test.cpp)				# 构造可执行文件
target_link_libraries(test_128 kem_128)						# 链接到编译出的库文件

VSCode 配置

首先安装微软的 CMake Tools 扩展包,左栏如图所示,

launch.json

该文件用于配置调试器 ,我们将其中的 program 设置为 command:cmake.launchTargetPath,这是使用 CMake 构建出的可执行文件路径,

json 复制代码
{
    "version": "0.2.0",
    "configurations": [
        {
            "name": "CMake Debug",
            "type": "cppdbg",
            "request": "launch",
            "program": "${command:cmake.launchTargetPath}",
            "args": [],
            "stopAtEntry": false,
            "cwd": "${workspaceFolder}",
            "environment": [],
            "externalConsole": false,
            "MIMode": "gdb",
            "setupCommands": [
                {
                    "description": "Enable pretty-printing for gdb",
                    "text": "-enable-pretty-printing",
                    "ignoreFailures": true
                }
            ]
        }
    ]
}

现在,可以在左栏中配置、生成、调试文件,使用 ctrl + F5 不调试执行,使用 F5 调试执行(打断点、查看寄存器的值,等等)

task.json

该文件用于配置编译器 ,可在 command 属性配置编译器路径(usr/bin/g++),在 args 属性中设置依赖库文件(-I, -L, -l)的路径,等等。这里,我们使用 CMake 扩展,上述的 launch.json 将会覆盖该文件,它通过命令面板(Ctrl + Shift + P)中的 CMake: ConfigureCMake: Build 完成项目的配置和构建。因此该文件不需要编写。

c_cpp_properties.json

该文件用于配置 C/C++ 开发环境 ,包括:头文件目录 includePath, 编译器目录 compilerPath, 宏定义 defines,等等。这里,我们使用 CMake 扩展,上述的 launch.json 将会覆盖该文件,它根据 CmakeLists.txt 中的设置来配置环境。因此该文件不需要编写。

相关推荐
✿ ༺ ོIT技术༻2 分钟前
笔试强训:Day6
数据结构·c++·算法
CodingInCV26 分钟前
cursor/vscode连接低版本的系统(glibc<2.28)
ide·vscode·编辑器
jz_ddk3 小时前
[学习] C语言多维指针探讨(代码示例)
linux·c语言·开发语言·学习·算法
星夜9825 小时前
C++回顾 Day6
开发语言·数据结构·c++·算法
asom228 小时前
LeetCode Hot100(矩阵)
算法·leetcode·矩阵
蒟蒻小袁8 小时前
力扣面试150题--二叉树的右视图
算法·leetcode·面试
一块plus8 小时前
当 Bifrost 与 Hydration 携手:Gigadot 能为 Polkadot DeFi 带来哪些新可能?
算法·架构
进击的小白菜9 小时前
LeetCode 215:数组中的第K个最大元素 - 两种高效解法详解
java·算法·leetcode
写个博客10 小时前
代码随想录算法训练营第五十三天
算法
1白天的黑夜111 小时前
动态规划-152.乘积最大子数组-力扣(LeetCode)
c++·算法·leetcode·动态规划