CMake OSX命令行与GUI的差异

CMake OSX Command line vs GUI Differences

本文关键字:GUI OSX 命令行 CMake      更新时间:2023-10-16

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

https://github.com/sweeneychris/TheiaSfM

使用通过XCode通过Macports安装的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明显安装在/opt/local/bin中(通过macports)。

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找不到相同的包,有什么明显的原因吗?

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

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

不完全正确。

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

对于搜索ImageMagic,它使用标准的CMake脚本,该脚本不会明确搜索/opt/local