在Windows下使用Cmake编译OpenSceneGraph

时间:2013-10-18 08:33:52

标签: c++ compilation cmake openscenegraph

我正在尝试使用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告诉我“配置过程中出错,项目文件可能无效”

2 个答案:

答案 0 :(得分:0)

您的问题不在您使用的编译器版本中;事实上,我在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的那一行

答案 1 :(得分:0)

在正常情况下,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等,并尝试修复它。