【问题标题】:cmake find_package cannot locate glfw after build and installcmake find_package 在构建和安装后无法找到 glfw
【发布时间】:2017-02-25 19:53:46
【问题描述】:

我正在尝试使用 cmake 的 find_package 函数来查找 glfw3 的安装,但我不太确定我是否理解说明。我已经下载了 glfw3 并按照说明进行了构建。

下载src,进入root,运行cmake ..

然后我在 Visual Studio 中打开主解决方案glfw.sln。我构建了解决方案,一切似乎都很好。我可以看到 lib 的创建位置和所有内容。在我自己的 cmake 项目中,当我使用 find_package(glfw3 REQUIRED) 时收到此错误:

By not providing "Findglfw.cmake" in CMAKE_MODULE_PATH this project has
asked CMake to find a package configuration file provided by "glfw", but
CMake did not find one.

Could not find a package configuration file provided by "glfw" with any of
the following names:

glfwConfig.cmake
glfw-config.cmake

Add the installation prefix of "glfw" to CMAKE_PREFIX_PATH or set
"glfw_DIR" to a directory containing one of the above files.  If "glfw"
provides a separate development package or SDK, be sure it has been
installed.

我的印象是,一旦我运行并安装了另一个将包含在 glfw3 等其他项目中的 cmake 库,它就会在任何对 cmake 的调用都可以找到它的地方安装 glfw3config.cmake。有没有理由不发生这种情况?这个包含 *config.cmake 的文件夹通常位于哪里?

【问题讨论】:

    标签: cmake


    【解决方案1】:

    这可能是因为您构建了gflw3,但没有执行与make install 等效的Windows/Visual Studio,因此工件没有部署到cmake 知道要查找的位置。

    在为glfw3 调用cmake 时,您应该使用-DCMAKE_INSTALL_PREFIX= 传递一个合适的目录,然后在-DCMAKE_PREFIX_PATH= 中为您自己的项目引用它。基本上:

    1. 为您的 gflw3 项目运行 cmake 时,使用 -DCMAKE_INSTALL_PREFIX=C:/Users/me/gflw3 配置其输出工件的安装位置。
    2. 构建 gflw3 并部署/安装它。
    3. 告诉您自己的项目在运行cmake 时使用-DCMAKE_PREFIX_PATH=C:/Users/me/gflw3 在C:/Users/me/gflw3 中查找内容。

    【讨论】:

    • 我认为 find_package 和 config 的目的是消除最终用户指定库/模块位置的需要。如果他们无论如何都需要最终用户指定配置文件的位置,为什么不让他们操纵生成的 makefile 或 vcproj 文件以指向库。 cmake 不应该抽象这个吗?我只是想要它,这样当人们在我的项目上运行 cmake . 时,它会找到已安装的库并生成具有已枚举依赖项的 vcproj / makefile。这样做的方法是什么?
    • @FatalCatharsis 是。但是find_package() 并不神奇:它会在一组知名目录中查找包,您可以通过设置CMAKE_PREFIX_PATH 变量来扩展它。此外,这些知名目录的默认设置是特定于操作系统的,但通常是操作系统/供应商目录树的一部分。这可能会出现问题 w.r.t.尝试安装从源代码构建的东西时的文件/目录权限。您可以使用CMAKE_INSTALL_PREFIX 来解决那个。
    猜你喜欢
    • 2018-11-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-07-26
    • 2016-01-19
    • 2018-02-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多