如何使 find_package 找到不同版本的 Lua

我使用 Windows,Visual Studio 2019。以下是我的 CMakeLists.txt 文件:

project (demo C)
cmake_minimum_required(VERSION 2.8)

find_package(Lua 5.2 REQUIRED)

add_executable(demo main.c)
target_link_libraries(demo ${LUA_LIBRARIES})
target_include_directories(demo PRIVATE ${LUA_INCLUDE_DIR})

这个项目不能编译,因为 CMake 找不到版本号为 5.2 的 Lua。我的电脑上安装了版本号为 5.1.4 的 Lua,是通过旧版(已经被弃用)的 luaforwindows 安装器安装到了 C:\Program Files (x86)\Lua\5.1 目录下的,我尝试在 find_package() 中指定 5.1 或者不指定版本号,可以正常找到。

但是 Lua 5.2 或更高版本没有这样的安装器,所以我从 https://sourceforge.net/projects/luabinaries/ 下载了 5.2 的二进制文件,将它们复制到了 C:\Program Files (x86)\Lua\5.2 目录下的一个类似的目录结构,但是它们没有被找到。可能有一些环境变量或其他方法可以给 FindLua.cmake 脚本一些提示——在 Windows 上,到底应该采用哪种方法呢?

我尝试了这些:我认为可以使用 CMAKE_PREFIX_PATH 来处理这个问题,所以我在 CMakeSettings.json 中加入了以下内容:

      "cmakeCommandArgs": "-DCMAKE_PREFIX_PATH=C:/Program Files (x86)/Lua/5.2",

但是没有效果,仍然得到了旧的信息:

1> [CMake]   Could NOT find Lua (missing: LUA_INCLUDE_DIR) (Required is at least version
1> [CMake]   "5.2")
点赞
用户30404
用户30404

我最终解决了问题。库的名称必须为 lua52.lib (我下载的压缩包中名称为 liblua52.a,虽然我已将其重命名为 .lib,但我没有使用该名称,导致 FindLua.cmake 无法找到它)。然后我还将所有的 PATH、LUA_PATH、LUA_DEV 和其他环境变量都更改为指向 5.2 目录,现在它可以正常工作了。不过我不知道为什么 CMAKE_PREFIX_PATH 不起作用,因为我希望能够针对每个项目选择一个位置。

2020-12-27 20:11:09