使用 CMake、VS 2015 来编译 gtest 时,发现 RelWithDebInfo 配置下,输出目录并没有生成包含编译信息的 pdb 文件, 我们看看这个问题能不能解决
本文使用 CMake,VS 2015 来编译 google test,相关版本信息如下:
使用到的程序 | 版本 | 下载地址 |
---|---|---|
CMake | 3.12.0 | https://cmake.org/files/v3.12/cmake-3.12.0-win64-x64.msi |
VS 2015 | 14.0 | https://go.microsoft.com/fwlink/?LinkId=532606&clcid=0x409 |
google test | 1.8.0 | https://github.com/google/googletest/archive/release-1.8.0.zip |
其实本文也使用了另一个版本的 CMake(3.11.4),因为推测是 CMake 的 bug 所以升级到了最新版,但是问题依旧
打开 VS2015 x64 本机工具命令提示符,切换到 google test 解压后的目录,使用以下命令生成 sln 解决方案:
mkdir build
cd build
cmake .. -G"Visual Studio 14 2015"
使用 RelWithDebInfo 配置生成的 lib 时,编译器会提示警告
gtest.lib(gtest-all.obj) : warning LNK4099: 未找到 PDB“gtest.pdb”(使用“gtest.lib(gtest-all.obj)”或在“D:\src\ut\x64\Release\gtest.pdb”中寻找);正在链接对象,如同没有调试信息一样
分析到这里其实问题解决也就简单了,在 build 目录下搜索 pdb 文件,我们发现 pdb 文件位于以下位置:
build\googlemock\gtest\gtest.dir\RelWithDebInfo
当然这个输出位置在 gtest 项目配置里也可以找到,把 $(IntDir) 改为 $(OutDir) ,就可以输出到和 gtest.lib 相同的位置:
很明显 CMake 生成的项目没有把 pdb 复制到输出目录,寻求原因时我们发现之前 CMake 也有 这个问题, 但是升级到最新版问题依然存在
编译 CMake 生成的 VS 解决方案时,如果使用 RelWithDebInfo 配置,项目并不会自动把 pdb 文件复制到输出目录,需要自行寻找, 或修改生成的项目文件