说明
本文主要记录个人在使用window10使用cmake编译libevent遇到了一点小问题,这里就简单的记录一下,给cmake编译项目不熟悉的朋友一点帮助
环境
操作系统:Win10
编译环境:VS2019
编译代码:libevent-2.1.11-stable (代码请去github取:libevent源码),个人建议,不用最新版本,使用稳定版本,否则可能在使用上遇到了BUG,不好在网上搜搜资料。
步骤
1.在windows环境下安装cmake,这个没什么问题,都是下一步下一步的操作,自行百度
2.安装openssl(libevent依赖openssl),否则在cmake时会遇到错误
,安装步骤参见安装openssl,推荐第二种方式。
3.将下载的源码解压出来,在主目录下创建一个build文件夹(名字随意,主要是存放编译后的目录)
4.在主目录的cmake目录里添加一个Uninstall.cmake.in,github说明:添加Uninstall.cmake.in,内容如下
if(NOT EXISTS "@CMAKE_BINARY_DIR@/install_manifest.txt") message(FATAL_ERROR "Cannot find install manifest: @CMAKE_BINARY_DIR@/install_manifest.txt") endif() file(READ "@CMAKE_BINARY_DIR@/install_manifest.txt" files) string(REGEX REPLACE "\n" ";" files "${files}") foreach(file ${files}) message(STATUS "Uninstalling $ENV{DESTDIR}${file}") if(IS_SYMLINK "$ENV{DESTDIR}${file}" OR EXISTS "$ENV{DESTDIR}${file}") exec_program( "@CMAKE_COMMAND@" ARGS "-E remove \"$ENV{DESTDIR}${file}\"" OUTPUT_VARIABLE rm_out RETURN_VALUE rm_retval ) if(NOT "${rm_retval}" STREQUAL 0) message(FATAL_ERROR "Problem when removing $ENV{DESTDIR}${file}") endif() else(IS_SYMLINK "$ENV{DESTDIR}${file}" OR EXISTS "$ENV{DESTDIR}${file}") message(STATUS "File $ENV{DESTDIR}${file} does not exist.") endif() endforeach()
5.由于我使用的VS2019,相比于前几个版本的VS,还有点差异,这里先说明怎么编译64位的realease和debug,我没有发现怎么编译成32位版本的(使用cmake --help,可以知道编译VS2019需要使用-A参数来编译需要的32位或者64位的,但是我始终没有成功,如果有成功的朋友,可以告诉我一下)
(1)编译x64的realease版本:
cmake -G "Visual Studio 16 2019" -DCMAKE_BUILD_TYPE=Release .. cmake --build . --config Release
(2)编译x64的debug版本:
cmake -G "Visual Studio 16 2019" .. cmake --build .
注意:使用CMD或者git的时候需要在build(刚创建的)目录下使用以上2句命令,…代表上一级目录,.代表当前目录,cmake是使用CMakeLists.txt来进行编译的,如果目录不对,会找不到该文件。从而无法编译
编译的dll和lib文件都在build相应的目录下。
个人总结
当使用cmake时,不知道要如何编译成自己需要的环境时,可以使用cmake --help查看帮助。
在cmake编译过程中,出现错误时,可以借助日志提示查找错误的原因。