上一次使用vscode编译成功了基于GMSSL实现的sm2加解密,这次尝试用CMake和命令行对本工程进行编译。
上次博客:https://blog.csdn.net/QINGCHIwarm/article/details/135162062?spm=1001.2014.3001.5501
CMake编译
使用流程
首先大致介绍一下使用CMake的使用流程:
1.编写程序
2.新建CMakeLists.txt(记住一个字母都不能错)
3.编写CMakeLists.txt
4.运行CMake
CMakeLists.txt的编写和执行
重点就是在CMakeLists.txt的编写上,以下是我写的CMakeLists.txt:
cmake_minimum_required(VERSION 3.20.0)//cmake最小版本约束
project("SM2_test_CMake" VERSION 0.0.1)//工程名(作用不大)
#添加头文件目录
include_directories(include include/openssl)
#添加源文件
add_executable(sm2test_cmake src/test.cpp src/gmutil.cpp)
#添加库文件路径
link_directories(lib)
#添加链接的库文件
target_link_libraries(sm2test_cmake ${CMAKE_SOURCE_DIR}/lib/libcrypto.a)
其中最主要就是配置头文件路径,添加所需编译的源文件,添加库文件路径,链接库文件。
为了工程的简洁性,我们使用外部构建CMake,在终端输入命令如下:
mkdir build//新建build文件夹
cd build//进入build文件夹
cmake ..//因为进入到build文件夹了,CMakeLists.txt在上一级目录,所以使用cmake ..
make//执行并生成可执行文件
./sm2test_cmake//执行可执行文件生成结果
运行情况如下图所示:
这里补充一点,如果在执行到make指令时报错要把build文件夹下的所有东西删除,嫌麻烦的可以在build文件夹下用如下命令行:
cd build//转到build文件夹下,已经在build的不用输入
rm -rf *//清除所有文件
命令行编译
命令行的编译超级简单,只需要在工程文件夹下输入命令行即可:
主要写法是这样的:
g++ -o 输出的可执行文件名 ./src/源文件1.cpp ./src/源文件2.cpp -I头文件路径1 -I头文件路径2 -L库目录 -l链接库名字(掐头去尾)
具体应用到这里就是这样的:
g++ -o sm2minglinghang ./src/test.cpp ./src/gmutil.cpp -Iinclude -Iinclude/openssl -Llib -lcrypto
执行后生成可执行文件,运行可执行文件生成结果:
./sm2minglinghang
生成结果如下: