Скомпилируйте OpenSceneGraph с помощью Cmake под Windows

Я пытаюсь настроить Openscenegraph 3.0.1 с помощью Cmake. Я читал разные сообщения в блогах, но это не работает.

Я настроил пути, нажал «Компилировать» и выбрал 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 сообщает мне: «Ошибка в процессе настройки, файлы проекта могут быть недействительными».


person Bernhard    schedule 18.10.2013    source источник
comment
Можете ли вы самостоятельно найти pthread.h в пути включения вашего VS? Может быть, оно отсутствует? (Я не знаю, может быть, потому что Windows все меньше и меньше совместима с POSIX)   -  person Shahbaz    schedule 18.10.2013
comment
на моем компьютере нет ничего похожего на pthread.h. Когда я открываю сгенерированный файл sln. VS жалуется, что какой-то проект не загружен (на самом деле ни один не загружен)   -  person Bernhard    schedule 18.10.2013
comment
Боюсь, я действительно не могу помочь вам с вещами, связанными с Windows, но я могу предложить улучшение. Рассматривали ли вы возможность использования кроссплатформенных инструментов/библиотек вместо специфичных для Windows? Если вы используете gcc, opengl, gtk, SDL и другие, после того, как вы закончите свой код, вы сможете запускать его под разными операционными системами, что весьма приятно. Есть ли причина, по которой вы хотели бы привязать себя к (умирающим и далеким от стандарта) окнам?   -  person Shahbaz    schedule 18.10.2013
comment
@Shahbaz Весь смысл CMake в том, что вам не нужно привязываться к одной среде, такой как GNU или Windows;)   -  person ComicSansMS    schedule 21.10.2013
comment
@ComicSansMS, верно, но на самом деле я имел в виду Visual Studio (в отличие, например, от MinGW).   -  person Shahbaz    schedule 21.10.2013


Ответы (2)


ваша проблема не в версии компилятора, которую вы используете; на самом деле, я запускаю OpenSceneGraph 3 (и osgEarth) без проблем в VisualStudio 2012.

Кажется, это проблема с самим Cmake/CMakeLists.txt. Попробуйте создать другие проекты с помощью cmake, чтобы проверить, работают ли они, или попробуйте использовать версию CMake, близкую к тому, что нужно OpenSceneGraph (см. CMAKE_MINIMUM_REQUIRED в основном файле CMakeLists.txt), хотя язык CMake должен быть совместимым с более ранними версиями, я не знаю, всегда ли это так.

pthread.h не имеет ничего общего с вашей проблемой, НЕ СУЩЕСТВУЕТ в Windows (за исключением случаев, когда вы используете MinGW для поиска других проблем) и не требуется для OSG - я думаю, вы правильно настроили OpenThreads, чтобы не использовать библиотеки у вас нет. В любом случае, это только часть работы, которую CMake выполняет при каждой сборке — ищет какие-то случайные вещи, например, может ли он найти pthreads.h или нет, которые дают CMake некоторое представление о вашей среде и обычно не относятся к проектам, которые вы создаете. с cmake. Так что просто игнорируйте эту строку о pthread.h

person Pavel Beliy    schedule 21.10.2013

В обычных условиях CMake не должен искать pthread для Windows. Ниже приведена пара строк в 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 вашей системы и т. д. и попытайтесь исправить это.

person SylvanBlack    schedule 12.11.2013