c++ - 在 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,这可以正常工作。
有没有解决的办法?你如何处理这种情况?
解决方案
因此,在 您的 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
项目的开发人员该问题,或者最多为他们创建一个补丁来解决问题。