參考文獻:
- 如何用 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
中的設置來配置環境。因此該文件不需要編寫。