gpt4 book ai didi

c++ - 防止 CMake 查找已安装的库而不是 "local"库

转载 作者:IT王子 更新时间:2023-10-29 01:22:24 27 4
gpt4 key购买 nike

我同时从事多个项目(一些库,以及一些依赖于它们的游戏)。它们都在 GitHub 上,在单独的 repo 协议(protocol)中。

为方便起见,我将每个存储库都拉到“工作区文件夹”中,如下所示:

/home/myWorkspace/Library1/
/home/myWorkspace/Library2/
/home/myWorkspace/Library3/
/home/myWorkspace/App1/
/home/myWorkspace/App2/

我有 FindLibrary1FindLibrary2FindLibrary3 .cmake 文件,它们按顺序在 ../(对应于“myWorkspace”文件夹),然后是 /usr/lib/

在 Windows 上,CMake 在 myWorkspace/ 中查找库,而在 Linux 上,无论如何,总是首先找到已安装的库。

因为我想在 myWorkspace/ 文件夹中工作,然后在完成后安装库,我更喜欢 CMake 来查找和链接 myWorkspace/< 中的所有内容文件夹。

如果没有 myWorkspace,我还希望 CMake 在 /usr/lib//usr/local/lib/ 中搜索库/ 文件夹,但是如果 myWorkspace/ 存在,它应该有优先级。

我正在使用的 CMake 文件示例:


SSVUtils:没有依赖项的库

SSVUtils CMakeLists:https://github.com/SuperV1234/SSVUtils/blob/master/CMakeLists.txt

查找SSVUtils.cmake:https://github.com/SuperV1234/SSVUtils/blob/master/cmake/modules/FindSSVUtils.cmake


SSVUtilsJson:依赖SSVUtils和SSVJsonCpp的库

SSVUtilsJson CMakeLists:https://github.com/SuperV1234/SSVUtilsJson/blob/master/CMakeLists.txt

查找SSVUtilsJson.cmake:https://github.com/SuperV1234/SSVUtilsJson/blob/master/cmake/modules/FindSSVUtilsJson.cmake


我有什么想法可以优先考虑 myWorkspace/ 文件夹,同时仍然有可能在文件系统路径中找到库?

最佳答案

默认情况下,find_path(或 find_library 等)首先检查系统标准位置中的文件,然后再搜索 PATH 中提供的值。这就是为什么总是首先在 Linux 上找到“已安装”库(但在 Windows 上则不然,因为它没有安装库的标准位置)。

您可以使用 NO_CMAKE_SYSTEM_PATH 选项禁用该行为:它将跳过对标准位置文件的检测。

现在...如果您仍然想在找不到本地版本时使用已安装的库作为后备,您可以分两步完成:

find_path(... NO_CMAKE_SYSTEM_PATH)

if (nothing_found)
find_path(...)
endif()

关于c++ - 防止 CMake 查找已安装的库而不是 "local"库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16875664/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com