【问题标题】:Compile OpenSceneGraph with Cmake under WindowsWindows下用Cmake编译OpenSceneGraph
【发布时间】: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 相对)。

标签: c++ compilation cmake openscenegraph


【解决方案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 等并尝试修复它。

    【讨论】:

      猜你喜欢
      • 2018-03-05
      • 1970-01-01
      • 2021-05-03
      • 1970-01-01
      • 1970-01-01
      • 2019-07-01
      • 2012-04-30
      • 1970-01-01
      • 2021-09-06
      相关资源
      最近更新 更多