1.命令行编译程序
这里要说明下,直接用qt或者VS2022打开cmake工程,编译没有成功。所以,老老实实的按照官方教程来,使用命令行编译。
(1)准备
1)安装cmake,版本3.18以上,尽量选择最新版本。
2)安装VS2022,在window上就只能选择VS2022 编译器,其他编译器官方不保证能够编译成功。
3)要从命令行构建 OR 工具程序,您必须使用 x64 原生工具命令提示符(不是开发者命令提示符)。我因为没有注意,用命令行构建一直没有成功。
x64原生工具命令提示符(x64 Native Tools Command Prompt for VS 2022)在VS2022的菜单目录下。
(2)下载源码
1)从官方github拉去源码
git clone -b main https://github.com/google/or-tools
2)先抓取所有分支的源码,然后提取tag“v9.12”的源码,并创建分支“9.12”
git fetch --all --tags --prune git checkout tags/v9.12 -b v9.12
尽量通过tag的版本号来下载源码,最新的代码没有经过严格测试,下载编译后,可能会出现各种问题。
(3)启动x64原生工具命令提示符来执行命令,要用管理员身份来启动,否则会报MSB307错误,这个一般是没有管理员权限导致的。(这部很重要)
(4)配置构建
cmake -S . -B build -DBUILD_DEPS=ON
(5)构建源码
cmake --build build --config Release --target ALL_BUILD -j -v
(6)在操作系统上安装 OR-工具
cmake --build build --config Release --target INSTALL -v
安装路径可在CMakeCache.txt查看
//Install path prefix, prepended onto install directories. CMAKE_INSTALL_PREFIX:PATH=C:/Program Files (x86)/ortools
安装日志文件install_manifest.txt
2.代码改动
(1)utf8和utf8-bom的问题
原因:Linux的文本协议默认是utf8,而Windows的文本协议是utf8-bom。有些特殊文本符号在utf8-bom下无法识别,所以把msvc编译器的协议也改成utf8。
if(MSVC) set(CMAKE_CXX_STANDARD 20)
# 设置源代码和执行字符集为 UTF-8(MSVC 2015 及以上支持 /utf-8)
message(STATE "set utf-8=======") add_compile_options("$<$<C_COMPILER_ID:MSVC>:/utf-8>") add_compile_options("$<$<CXX_COMPILER_ID:MSVC>:/utf-8>") else() set(CMAKE_CXX_STANDARD 17)
endif()
3.总结
QT和VS2022都已经支持了cmake,但是我试了好几次没有成功,应该是需要额外的配置。老老实实按照官方教程来吧。官网只提供了命令行操作。
参考:
[1]官网 https://developers.google.com/optimization/install/cpp/source_windows?hl=zh-cn