参考文献:
- 如何用 GCC, CMake 和 Make 编译C/C++代码
- Windows 上的 Linux 子系统:WSL
- WSL:桌面 UI + 远程连接 RDP + 配置 VScode
文章目录
- CMake 配置
- VSCode 配置
- launch.json
- task.json
- c_cpp_properties.json
CMake 配置
编写如下的 CmakeLists.txt
,设置文件之间的链接关系,
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, Releaseinclude_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
构建出的可执行文件路径,
{"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: Configure
和 CMake: Build
完成项目的配置和构建。因此该文件不需要编写。
c_cpp_properties.json
该文件用于配置 C/C++ 开发环境,包括:头文件目录 includePath
, 编译器目录 compilerPath
, 宏定义 defines
,等等。这里,我们使用 CMake 扩展,上述的 launch.json
将会覆盖该文件,它根据 CmakeLists.txt
中的设置来配置环境。因此该文件不需要编写。