如何让 CMake find_library 为构建类型找到正确的库

How to get CMake find_library to find correct library for build type

我正在尝试在 CMake 中获取 find_library 以正确找到用于 link 进入我的项目的第三方库。但是,即使构建目标是 64 位,它也在 returning 库的 32 位版本。有没有办法强制它根据构建目标使用正确的库?

我有一个目录,其中包含两个版本的库,someLib.lib(32 位)和 someLib_64.lib(64 位)。

我使用 Visual Studio 2019 CMake 模板创建了一个带有调试 x64 配置的新项目。当我尝试构建项目时出现错误,因为它试图将 32 位库 link 转换为 64 位应用程序。查看 CMake 变量缓存显示 find_library 调用已解析为 someLib.lib 而不是 someLib_64.lib。即使我在 find_library 调用的 NAMES 子句下指定 someLib_64 也会发生这种情况。

cmake_minimum_required (VERSION 3.8)

find_path (LIB_INCLUDE_DIR someLib.h c:/Progra~1/someLib/include /usr/include)

find_library (SOME_LIB NAMES someLib_64 HINTS c:/Progra~1/someLib/Lib /usr/lib)
if (NOT DEFINED ${SOME_LIB})
    find_library (SOME_LIB NAMES someLib HINTS c:/Progra~1/someLib/Lib /usr/lib)
endif (NOT DEFINED ${SOME_LIB})

# Add source to this project's executable.
add_executable (myProject "myProject.cpp" "myProject.h")
target_link_libraries (myProject ${SOME_LIB})
target_include_directories (myProject PUBLIC ${LIB_INCLUDE_DIR})

我希望它是 return c:/Program Files/SomeLib/Lib/someLib_64.lib,但它是 returnc:/Program Files/SomeLib/Lib/someLib.lib。在构建 64 位项目时,有没有办法让它正确 link 64 位库?

事实证明这是一个简单的解决方案 - 我必须删除并重新创建 CMake 缓存(项目 -> CMake 缓存 -> 删除缓存)。当我在某个时候开发脚本时,它已绑定到 32 位版本,尽管选择了生成缓存,但它实际上并没有更新变量赋值。