Windows下用Cmake编译OpenSceneGraph

Posted

技术标签:

【中文标题】Windows下用Cmake编译OpenSceneGraph【英文标题】:Compile OpenSceneGraph with Cmake under Windows 【发布时间】:2013-10-18 08:33:52 【问题描述】:

我正在尝试使用 Cmake 设置 Openscenegraph 3.0.1。我阅读了不同的博客文章,但它不起作用。

我设置好路径,点击编译并选择VS11(因为我有VS 2012)并使用本机编译器。

然后我直接得到这个错误:

CMake Error at C:/Program Files (x86)/CMake 2.8/share/cmake-2.8/Modules  CMakeCInformation.cmake:37 (get_filename_component):
get_filename_component called with incorrect number of arguments
Call Stack (most recent call first):
CMakeLists.txt:3 (PROJECT)


CMake Error: Internal CMake error, TryCompile configure of cmake failed
Looking for include file pthread.h - not found

此外,相同堆栈跟踪会发生更多错误。如果您愿意,也可以将它们粘贴在这里。

之后,CMake 告诉我“配置过程出错,项目文件可能无效”

【问题讨论】:

你能在你的VS'包含路径中找到pthread.h吗?难道是它不见了? (我不知道可能是因为 Windows 越来越不兼容 POSIX) 我的电脑上的任何地方都没有像 pthread.h 这样的东西。当我打开生成的 sln 文件时。 VS 抱怨某些项目没有加载(实际上没有加载) 恐怕我真的无法帮助您解决与 Windows 相关的问题,但我可以提出改进建议。您是否考虑过使用跨平台工具/库而不是特定于 Windows 的工具?如果你使用gccopenglgtkSDL等,一旦你完成了你的代码,你实际上可以在不同的操作系统下运行它,这非常好。您是否有理由想将自己绑定到(垂死的和远离标准的)窗口? @Shahbaz CMake 的全部意义在于,您不必致力于像 GNU 或 Windows 这样的单一环境;) @ComicSansMS,对,但我实际上指的是 Visual Studio(例如,与 MinGW 相对)。 【参考方案1】:

您的问题不在于您使用的编译器版本;事实上,我在 VisualStudio 2012 上运行 OpenSceneGraph 3(和 osgEarth)没有任何问题。

这似乎是 Cmake/CMakeLists.txt 本身的问题。尝试使用 cmake 构建一些其他项目,看看它们是否有效,或者尝试使用接近 OpenSceneGraph 需要的 CMake 版本(查看主 CMakeLists.txt 文件中的 CMAKE_MINIMUM_REQUIRED ),尽管 CMake 语言是为了兼容对于早期版本,我不知道是否总是这样。

pthread.h 与您的问题无关,在 Windows 中不存在(除非您使用 MinGW 来查找更多问题),并且 OSG 不需要 - 我认为您将 OpenThreads 正确配置为不要使用你没有的库。无论如何,这只是 CMake 在每次构建中所做工作的一部分——寻找一些随机的东西,比如它是否可以找到 pthreads.h,这让 CMake 对你的环境有一些了解,并且通常与你构建的项目无关与 cmake。所以请忽略关于 pthread.h 的那一行

【讨论】:

【参考方案2】:

在正常情况下,CMake 不应该为 Windows 寻找 pthread。以下是 CMake (2.8) FindThreads.cmake 中的几行代码,用于搜索适当的模块。

  ...      
    CHECK_INCLUDE_FILES("pthread.h" CMAKE_HAVE_PTHREAD_H)
    if(CMAKE_HAVE_PTHREAD_H) 
      ...
    endif()
  ...

  if(CMAKE_SYSTEM MATCHES "Windows")
    set(CMAKE_USE_WIN32_THREADS_INIT 1)
    set(Threads_FOUND TRUE)
  endif()

如您所见,第一次检查应该失败并推出到第二次检查。但是,我相信在您的情况下,CMake 以某种方式发现 pthread.h(也许您也有 MinGW)这似乎是您系统中的一个简单冲突。检查系统的 PATH 等并尝试修复它。

【讨论】:

以上是关于Windows下用Cmake编译OpenSceneGraph的主要内容,如果未能解决你的问题,请参考以下文章

Windows下用CMake编译 libuv

Windows下用CMake编译JsonCpp及配置(适合新手)

Cygwin下用CMake编译库

在 Linux 下用 CMAKE 编译安装 OpenCV 3.2.0

x86 平台代码移植到 嵌入式平台[交叉编译三方库]

怎样在windows下用mingw编译librsvg