故事背景
host:Linux,guest:Windows
平常工作环境为Linux(VS Code),该项目需要发布为exe以支持Windows(VS)使用,即将CMake项目转换成sln项目,并适配Windows下的环境
一、开发环境准备
依赖:OpenCV、yaml-cpp、Git、CMake、VS、VBox
【均为官网】
Win10 ISO:https://www.microsoft.com/zh-cn/software-download/windows10ISO
VBox:https://www.virtualbox.org/wiki/Linux_Downloads
Visual Studio:https://visualstudio.microsoft.com/vs/older-downloads/
Git:https://git-scm.com/download/win
CMake:https://cmake.org/download/
OpenCV:https://opencv.org/releases/
yaml-cpp:https://github.com/jbeder/yaml-cpp
注:除yaml-cpp之外均可直接下载安装程序
二、编译过程
除yaml-cpp外均默认安装即可,至此,已在VBox中创建了Win10虚拟机并安装了Visual Studio、Git、CMake以及OpenCV
有多种编译方式,本文采用最懒狗的纯命令行方法,不使用GUI,不配置环境变量
1.编译yaml-cpp
与Linux编译类似,通过git clone
拉取yaml-cpp源码,新建build,注意CMake命令为
cmake -DYAML_BUILD_SHARED_LIBS=ON -A x64 -G "Visual Studio 15 2017" ..
-DYAML_BUILD_SHARED_LIBS=ON为编译动态库选项,默认为OFF,即默认编译静态库
-A x64,默认为Win32
-G "Visual Studio 15 2017"为编译目标平台,必填
编译完成后,在build文件夹内会生成sln项目文件,打开后可在VS中选择Debug或Release模式,右键ALL_BUILD生成,即可在对应模式文件夹内生成yaml-cpp.lib
和yaml-cpp.dll
2.编译程序
与编译yaml-cpp类似,通过git clone
拉取项目源码,新建build,CMake命令为
cmake -G "Visual Studio 15 2017" -A x64 ..
使用Linux环境下的CMakeLists.txt
预期会报错,因为环境不同,find_package()
命令大概率找不到所需的库,以本项目为例OpenCV及yaml-cpp均需手动配置
配置OpenCV,仅需在find_package()
前加一句
set(OpenCV_DIR "G:/opencv/build/x64/vc14/lib")
配置yaml-cpp,由于在Windows下没有make install
,直接摈弃原有配置,重新配置如下
include_directories("G:/yaml-cpp/include")
link_directories("G:/yaml-cpp/build/Release")
target_link_libraries(project
yaml-cpp.dll
)
配置完成后使用CMake命令编译即可,同样会在build内生成sln程序,打开后选择Release模式,直接右键项目生成对应exe,将所需的dll与exe放置在同一级目录下便可运行
大概会遇到些语法问题,针对性修改即可
总结
先下班