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 的工具?如果你使用gcc
、opengl
、gtk
、SDL
等,一旦你完成了你的代码,你实际上可以在不同的操作系统下运行它,这非常好。您是否有理由想将自己绑定到(垂死的和远离标准的)窗口?
@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编译JsonCpp及配置(适合新手)