如何通过CMake将GoogleTest构建为共享库(DLL)
解决GoogleTest编译生成.dll动态库的CMake配置问题
核心问题分析
你之前手动修改CMakeCache.txt的方式容易导致配置不一致,而且.dll.a是MinGW环境下的导入库,真正的.dll文件其实已经生成了,只是你没找对位置。另外手动设置CMAKE_EXE_LINKER_FLAGS=-shared是多余的,反而可能干扰CMake的自动配置。
正确配置步骤(无需手动改CMakeCache.txt)
直接在CMake配置阶段设置以下两个关键变量,推荐用CMake命令行或CMake GUI操作,避免手动修改缓存文件:
1. 命令行方式(MinGW环境)
在GoogleTest源码目录外新建build文件夹,进入后执行:
mkdir build && cd build cmake -G "CodeBlocks - MinGW Makefiles" -DBUILD_SHARED_LIBS=ON -DGTEST_CREATE_SHARED_LIBRARY=1 ..
-G "CodeBlocks - MinGW Makefiles":指定生成CodeBlocks项目文件-DBUILD_SHARED_LIBS=ON:CMake全局开关,控制生成动态库而非静态库-DGTEST_CREATE_SHARED_LIBRARY=1:GoogleTest专属宏,启用动态库导出符号的编译逻辑
2. CMake GUI方式
- 选择GoogleTest源码目录和新建的
build目录 - 点击「Configure」,选择
CodeBlocks - MinGW Makefiles作为生成器 - 在变量列表中找到
BUILD_SHARED_LIBS,设为ON - 添加新变量
GTEST_CREATE_SHARED_LIBRARY,类型选BOOL,值设为1 - 再次点击「Configure」,确认无错误后点击「Generate」生成CodeBlocks项目
找到生成的.dll文件
生成并编译项目后:
.dll.a是链接时用的导入库,存放在build/lib目录- 真正的
.dll动态库文件会在build/bin目录(或对应Debug/Release子目录),这才是你项目运行时需要的文件
额外注意事项
- 确保使用最新版GoogleTest,旧版本对动态库的支持可能不完善
- 编译时要对应项目的Debug/Release模式,Debug版的
.dll会带d后缀(比如gtestd.dll) - 项目中使用时,需将
.dll放到可执行文件同目录,链接阶段使用.dll.a导入库
内容的提问来源于stack exchange,提问作者blockchain187
相关产品推荐
相关产品推荐

