Cmake如何选择Vs2017和MinGw64 GCC编译器,编译libdwarf库
使用VS2017/VSCode编译libdwarf工程
VS2017支持Cmake编译,我将使用VS2017编译libdwarf库,在网上查了好多与dwarf相关的文章,在GitHub上可以轻易下载到libdwarf的源码,但是不知道如何使用,libdwarf库为开源代码,符合LGPL。
下载libdwarf库
打开github.com直接搜索libdwarf,排行第一的就是,地址https://github.com/avast/libdwarf,其实源码都一样,这个代码是我感觉比较干净的,文件结构如下:
文件中,其实包含两个库源码文件,一个是libdwarf,也就是我们需要的,一个是libelf库,这是libdwarf需要的。
安装需要的软件VSCODE、MinGW64、Cmake、VS2017
1、安装VSCODE、VS2017,比较简单
2、下载安装MinGW64、Cmake时,如果下载的是免安装版本,需要注意把可执行文件的路径加到系统变量Path中,如
Cmake目录D:\Program Files\CMake\bin;
MinGW64目录D:\mingw-w64\x86_64-8.1.0-posix-seh-rt_v6-rev0\mingw64\bin
添加这两个目录是为了让系统获取cmake.exe、gcc.exe(g++.exe、make.exe)等程序的路径
VSCODE编译工程
1、用vscode打开文件夹,并打开命令终端
2、在工程下新建build文件夹
输入cd ./build进入build目录下
2、在命令终端中输入如下命令后,回车
cmake.exe --no-warn-unused-cli -DCMAKE_EXPORT_COMPILE_COMMANDS:BOOL=TRUE -DCMAKE_BUILD_TYPE:STRING=Debug -DCMAKE_C_COMPILER:FILEPATH=D:\mingw-w64\x86_64-8.1.0-posix-seh-rt_v6-rev0\mingw64\bin\gcc.exe -DCMAKE_CXX_COMPILER:FILEPATH=D:\mingw-w64\x86_64-8.1.0-posix-seh-rt_v6-rev0\mingw64\bin\g++.exe -He:/Desktop/libdwarf-master -Be:/Desktop/libdwarf-master/build -G "MinGW Makefiles"
结果如下
3、输入make,进行编译
查看build目录下,生成了对应的库文件,如下
VS2017中编译工程
1、打开VS2017,快速启动处,输入cmake,选择文件打开cmakelist
选择源码文件夹下的CMakeLists.txt文件后,工程自动导入
2、在菜单栏处选择Cmake->全部重新生成,在工程下即可生成对应的库文件,生成的库文件的路径,在vs2017的输出窗口log中可以查到。
3、查看一下VS2017的cmake命令,如下
f:\vs2017_ide\common7\ide\commonextensions\microsoft\cmake\CMake\bin\cmake.exe -G “Ninja” -DCMAKE_INSTALL_PREFIX:PATH=“C:\Users\LCH\CMakeBuilds\45f6fcce-c0cf-843d-be1e-bace30bc47e8\install\x64-Debug (默认值)” -DCMAKE_CXX_COMPILER=“F:/VS2017_IDE/VC/Tools/MSVC/14.16.27023/bin/HostX64/x64/cl.exe” -DCMAKE_C_COMPILER=“F:/VS2017_IDE/VC/Tools/MSVC/14.16.27023/bin/HostX64/x64/cl.exe” -DCMAKE_BUILD_TYPE=“Debug” -DCMAKE_MAKE_PROGRAM=“f:\vs2017_ide\common7\ide\commonextensions\microsoft\cmake\Ninja\ninja.exe” “E:\Desktop\vs2017_pro\libdwarf-master”
4、工程导入后,cmake选项卡中点击重新生成,生成对应的lib、dll
retdec-libdwarf.lib
retdec-libdwarf.dll
retdec-libelf.dll
retdec-libelf.lib
5、但是生成的库在别的工程中调用,调用时可能会是debug、也可能是release,那么最好一次生成好
一下可以设置是生成release还是生成debug