参考文献:
文章目录
- [CMake 配置](#CMake 配置)
- [VSCode 配置](#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: Configure
和 CMake: Build
完成项目的配置和构建。因此该文件不需要编写。
c_cpp_properties.json
该文件用于配置 C/C++ 开发环境 ,包括:头文件目录 includePath
, 编译器目录 compilerPath
, 宏定义 defines
,等等。这里,我们使用 CMake 扩展,上述的 launch.json
将会覆盖该文件,它根据 CmakeLists.txt
中的设置来配置环境。因此该文件不需要编写。