Ogre和CMake出现错误

7
我在Ubuntu 12.04上安装了Ogre3D 1.8.1(源码包),一切都很顺利(我成功地在Ogre界面上运行了一些示例)。然而,在编译一个需要OpenCV、ArUco和Ogre库的外部项目(这个)时,我遇到了一个问题。当我运行该项目的CMake时,我收到以下消息:
CMake Error at CMakeLists.txt:46 (find_package):
By not providing "FindOGRE.cmake" in CMAKE_MODULE_PATH this project has
asked CMake to find a package configuration file provided by "OGRE", but
CMake did not find one.

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

OGREConfig.cmake
ogre-config.cmake

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


-- Configuring incomplete, errors occurred!

我知道FindOGRE.cmake在哪里,它在/usr/local/lib/OGRE/cmake中,但我不知道如何告诉CMake去查找那个文件夹并解决这个问题。

4个回答

6
您只需要使用命令行选项-D,以及变量CMAKE_MODULE_PATH
cmake . -DCMAKE_MODULE_PATH=/usr/local/lib/OGRE/cmake

我按你说的尝试使用“-D”命令,但仍然遇到了同样的问题。我还试着使用了CMake-gui,在其中将CMAKE_INSTALL_PREFIX设置为"/usr/local/lib/OGRE/cmake"路径,并将OGRE_DIR设置为OGRE安装文件夹。这样是否正确?即便如此,仍会出现相同的错误。 - WevertonApolinário
CMAKE_INSTALL_PREFIX 是你使用 make install 安装当前项目的位置,所以在这里并不是很相关。CMAKE_MODULE_PATH 是一个目录列表,当你使用 find_package 时,CMake 会在这些目录中查找 "FindXXX.cmake" 文件。最后,将 OGRE_DIR(或 CMAKE_PREFIX_PATH)设置为 Ogre 的安装目录需要存在一个名为 OGREConfig.cmake 或 ogre-config.cmake 的文件。如果 Ogre 提供了它们,其中一个将会存在(通过 install(export...) 生成)。我认为这才是 Ogre 应该提供的内容,而不是 FindOGRE.cmake。 - Fraser
你好。我正在使用“Linux Mint 14”。关键是找到cmake ogre文件。在我的系统中,cmake的命令行是cmake . -DCMAKE_MODULE_PATH=/usr/share/OGRE/cmake/modules/ - tres.14159

2

仅供参考,另一种解决方案是直接在CMakeLists.txt中添加模块路径。例如(在Debian 9上测试通过):

set(CMAKE_MODULE_PATH "/usr/share/OGRE/cmake/modules/;${CMAKE_MODULE_PATH}")

请确保在调用find_package之前添加该行。


1

对于我来说,在find_package之前,在CMakeLists.txt中设置以下内容才有效:

set(OGRE_DIR /usr/share/OGRE/build/sdk/CMake)

请注意,CMake目录是包含OGREConfig.cmake的目录。由于某种原因,我的CMake忽略了CMAKE_MODULE_PATH
也许对某些人有所帮助。

0

对我来说,这个解决方案在Manjaro上有效:

set(CMAKE_MODULE_PATH "/usr/lib/OGRE/cmake;${CMAKE_MODULE_PATH}")
find_package(OGRE QUIET)

if (OGRE_FOUND)
    include_directories( ${ogre_INCLUDE_DIR})
    link_directories(${OGRE_LIBRARIES})
    message(STATUS "OGRE: FOUND")
else()
    message(STATUS "OGRE: NOT FOUND")
endif()

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接