C 目标链接库和查找库之间的搜索路径有什么不同?
我有一个C库,它在CMake中包含以下依赖项:C 目标链接库和查找库之间的搜索路径有什么不同?,c,cmake,C,Cmake,我有一个C库,它在CMake中包含以下依赖项: if (WIN32) target_link_libraries(my_library legacy_stdio_definitions.lib) target_link_libraries(my_library wsock32) else() ... endif() 这对于我的应用程序来说基本上是很好的,但我正在尝试一种不同的方法,要求库具有绝对路径。因此,切换到以下内容: if (WIN32) find_lib
if (WIN32)
target_link_libraries(my_library legacy_stdio_definitions.lib)
target_link_libraries(my_library wsock32)
else()
...
endif()
这对于我的应用程序来说基本上是很好的,但我正在尝试一种不同的方法,要求库具有绝对路径。因此,切换到以下内容:
if (WIN32)
find_library(LEGACY_LIB legacy_stdio_definitions.lib)
find_library(WSOCK_LIB wsock32)
# Do something with ${LEGACY_LIB} and ${WSOCK_LIB}
else()
...
endif()
令我惊讶的是,这不起作用。两个find_库
s都失败,将变量设置为NOTFOUND
我该如何解决这个问题?我的第一个猜测是,
find\u library
与target\u link\u libraries
的查找位置不同,但我做了一些研究,无法找到它的查找位置。我遗漏了什么?不知道您使用的是什么版本的cmake,但在页面的一半,它有一个编号列表1-6,其中列出了find\u library
在未指定搜索路径的情况下正在搜索库的位置。这是针对v3.4的:@yanofind_库
docs不是我需要的,它已经找不到我想要的了。我需要target\u link\u library
搜索的路径,以将这些路径添加到find\u library
的搜索中。有意义吗?“目标链接库和查找库之间的搜索路径有什么区别?”——target\u link\u libraries
中的搜索路径由链接器决定,只需将target\u link\u libraries
的参数“馈送”到链接器。但在find_库中的搜索仅由CMake执行。的确,CMake倾向于搜索与链接器相似的路径,但路径仍然不相同。搜索系统是个好主意,但我真的认为它没有多大帮助。我在安装目录中找到了lib<代码>MSVS/2019/Community/VC/Tools/MSVC/14.23.28105/lib/onecore/x64
。我通常希望我能得到比猜测目标的安装路径更一般的东西。我同意,这看起来不像你应该指定的路径。看起来像是在LIB env变量中搜索路径。如果使用Visual Studio,请打开开发人员提示符(开始-->Visual Studio-->Visual Studio工具,本机工具命令提示符)并输入“set”,它将告诉您LIB设置为什么。虽然我认为这对您的问题没有帮助。我不知道您使用的是什么版本的cmake,但在页面的一半,它有一个编号列表1-6,其中列出了find\u library
在未指定搜索路径的情况下搜索库的位置。这是针对v3.4的:@yanofind_库
docs不是我需要的,它已经找不到我想要的了。我需要target\u link\u library
搜索的路径,以将这些路径添加到find\u library
的搜索中。有意义吗?“目标链接库和查找库之间的搜索路径有什么区别?”——target\u link\u libraries
中的搜索路径由链接器决定,只需将target\u link\u libraries
的参数“馈送”到链接器。但在find_库中的搜索仅由CMake执行。的确,CMake倾向于搜索与链接器相似的路径,但路径仍然不相同。搜索系统是个好主意,但我真的认为它没有多大帮助。我在安装目录中找到了lib<代码>MSVS/2019/Community/VC/Tools/MSVC/14.23.28105/lib/onecore/x64
。我通常希望我能得到比猜测目标的安装路径更一般的东西。我同意,这看起来不像你应该指定的路径。看起来像是在LIB env变量中搜索路径。如果使用Visual Studio,请打开开发人员提示符(开始-->Visual Studio-->Visual Studio工具,本机工具命令提示符)并输入“set”,它将告诉您LIB设置为什么。虽然我认为这对你的问题没有帮助。