【问题标题】:CMake OSX Command line vs GUI DifferencesCMake OSX 命令行与 GUI 差异
【发布时间】:2016-08-02 01:14:17
【问题描述】:

我正在尝试将项目 Theia-SfM 配置为在 Mac 上使用 XCode 进行编译。

https://github.com/sweeneychris/TheiaSfM

使用通过 Macports 通过 XCode 安装的 CMake 3.5.1,一旦安装了适当的依赖项,包就可以很好地配置和构建,例如

mkdir Build
cmake -G XCode ..

-- Generating done
-- Build files have been written to: /Users/alex/src/TheiaSfM/build

如果使用从 KitWare 下载并通过应用程序安装的 CMake GUI 3.5.1,相同的构建将无法找到 ImageMagick。输出结束:

-- Found SuiteSparse 4.2.1
-- Check for ImageMagick
ImageMagick_EXECUTABLE_DIRImageMagick_EXECUTABLE_DIR-NOTFOUND
CMake Error at /Applications/CMake.app/Contents/share/cmake-3.5/Modules/FindPackageHandleStandardArgs.cmake:148 (message):
  Could NOT find ImageMagick (missing: ImageMagick_convert_EXECUTABLE
  ImageMagick_mogrify_EXECUTABLE ImageMagick_convert_EXECUTABLE
  ImageMagick_mogrify_EXECUTABLE)

ImageMagick 已证明(通过 macports)安装在 /opt/local/bin 中。

Alexs-MacBook-Pro:TheiaSfM alex$ type -a mogrify
mogrify is /opt/local/bin/mogrify

是否有任何明显的原因导致相同版本的 CMake 无法找到相同的包?我假设 /opt/local 在我的 CMake GUI 路径搜索路径中,因为进一步向上它会在那里找到其他依赖项。

-- Found Google Flags: /opt/local/include in namespace: google
-- Check for Google Log
-- Found Google Logging: /opt/local/include
-- Check for Ceres

更一般地说,是否有 CMake USAGE 问题的活跃论坛?整个 CMAKE 似乎记录得很差,并且以无数令人困惑的方式失败。当大多数故障发生在构建具有许多依赖项的大型开源系统时,添加可执行文件和文件的简单示例对于理解这些中断是无用的。

此外,许多使用 CMake 的项目的支持水平较低,例如不是针对特定项目的问题和/或被放弃的论坛,感觉应该有一个公共论坛来讨论“我如何让 CMAKE 找到 xxxx 类型的问题”。

我不会介意生产力极低的感觉(本质上,为了获得可能会或可能不会编译、链接和/或随后在 32 位或 64 位代码中运行的解决方案,几天都在摆弄命令行),如果我是元构建系统的新手,但在与 Scons、NANT 和其他人作为游戏开发人员进行了 15 年的 C++ 元构建之后,我仍然不太坦率地确定 CMake 是否是一个精心制作的笑话。 OpenCV 和 Bullet 都是很好的项目示例,在这些项目中,只需将文件拖到您自己喜欢的 IDE 中并开始编译,比花几天时间在没有明显支持论坛的情况下搞乱 CMake 更快。

【问题讨论】:

  • 对 CMake 的官方支持是通过邮件列表处理的。有关使用问题,请参阅 here。不是最先进的,但社区在那里很活跃。并且您在查找 ImageMagick 时遇到的 CMakeGUI 配置问题对我来说听起来确实像 CMake 错误。请参阅 here 向 CMake 社区报告错误。

标签: c++ xcode macos opencv cmake


【解决方案1】:

有什么明显的原因导致相同版本的 CMake 找不到相同的包吗?

不同的安装方式可能会导致默认搜索路径的设置不同。您可以将CMAKE_PREFIX_PATH 变量设置为/opt/local,这样您的所有包都会被找到。

我假设 /opt/local 在我的 CMake GUI 路径搜索路径中,因为进一步向上它会在那里找到其他依赖项。

不完全正确。

对于搜索 Google 标志,您的项目 (Theia-SfM) 使用附带的脚本 FindGFlags.cmake,它明确地在 /opt/local 处搜索包(请参阅变量 GFLAGS_CHECK_INCLUDE_DIRS 的定义和用法)。

对于搜索 ImageMagic,它使用标准 CMake script,它不会明确搜索 /opt/local

【讨论】:

  • 以上正确答案。此外,为了完整起见,这里是 bugtracker 线程(最终结论:不是错误。)cmake.org/Bug/view.php?id=16058。然而,知道 Macports 应该被解释为“Mac Terminal Shell Ports”是值得的,除非你已经覆盖了系统默认值。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-04-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多