帮同事排查 Windows 平台上 CMake 执行 git process 的问题,具体表现为 git log 的中文输出是乱码。通过设置logOutpuptEncoding=utf-8 等方式,cmake打印的信息还是乱码。

在 bash 中执行相同的命令,git log 的中文信息输出正常,因此判断是CMake捕获git子进程返回的字符串有误。由于CMake中不存在类似 iconv 的命令,通过查阅CMake官方文档了解到 execute_process 有一个 ENCODING 的参数,将其设置为UTF-8 问题就解决了:

execute_process(
  COMMAND git log xxx
  WORKING_DIRECTOR xxx
  OUTPUT_VARIABLE xxx
  ENCODING UTF-8
)

PS:这个问题我和同事都尝试借助AI来解决,但是AI给出的答案都不靠谱,甚至直接给了错误的方法,最后还是通过阅读官方文档解决了问题。所以,虽然AI都很自信,但也不能盲目相信。