在 Cmake 中将 poppler 用作子项目且设置不正确 CMAKE_MODULE_PATH

Using poppler as a subproject in Cmake with `CMAKE_MODULE_PATH` set incorrectly

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

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

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

[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,这工作正常。

有办法解决这个问题吗?你如何处理这种情况?

因此,在 中,您的 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 项目的开发人员该问题,或者最多为他们创建一个补丁来解决该问题。