首页 > 解决方案 > 在 Cmake 中使用 poppler 作为子项目,并且 `CMAKE_MODULE_PATH` 设置不正确

问题描述

我是 CMake 的新手,我不确定我在做什么

我通过 CMake 将 poppler 用作我的应用程序的库。我已将其作为子模块导入。

如果我在我的顶级 CMake 文件中包含 popper add_subdirectory(...),则会出现以下错误

[cmake] CMake Error at external/poppler/CMakeLists.txt:7 (include):
[cmake]   include could not find requested file:
[cmake] 
[cmake]     PopplerDefaults
[cmake] 
[cmake] 
[cmake] CMake Error at external/poppler/CMakeLists.txt:8 (include):

这很可能是因为CMAKE_MODULE_PATH不正确。

经过一番挖掘,看起来 poppler 正在设置模块路径而不是附加到它。

https://gitlab.freedesktop.org/poppler/poppler/-/blob/master/CMakeLists.txt#L5

所以我似乎无法真正覆盖它。

我的(可能过于复杂)设置在这里,poppler 行注释掉了。 https://github.com/bdurrani/cmake-test/blob/master/CMakeLists.txt#L69

如果我从 poppler 文件夹中运行 cmake,这可以正常工作。

有没有解决的办法?你如何处理这种情况?

标签: c++cmakepoppler

解决方案


因此,在 您的 CMakeLists.txt中,只需在包含子项目之前存储和恢复 CMAKE_MODULE_PATH 即可。

set(tmp ${CMAKE_MODULE_PATH})
add_subdirectory(...)
# suffix the poppler stuff too.
set(CMAKE_MODULE_PATH "${tmp};${CMAKE_MODULE_PATH}")

您也可以单独通知poppler项目的开发人员该问题,或者最多为他们创建一个补丁来解决问题。


推荐阅读