14

有谁知道如何指定要使用 CMake 构建的 Mac OS X SDK?我已经搜索过,cmake mac "base sdk"但这没有任何结果。

我正在使用 CMake 生成 Unix 生成文件。

更新

在我的 10.6 安装中,我看到它/Developer/SDKs具有以下内容:

  • MacOSX10.4u.sdk
  • MacOSX10.5.sdk
  • MacOSX10.6.sdk

也许我可以让 CMake 以某种方式将这些路径之一传递给编译器?

另外,我的 10.7 安装只有:

  • MacOSX10.6.sdk
  • MacOSX10.7.sdk

这是否意味着它只能为这些平台构建?

更新 2

该死的,我才意识到实际上我没有使用 Xcode——所以这可能会影响一些答案。另外,我现在正在尝试使用 Mac OS X 10.8 开发人员预览版(有一些奇怪的结果,请参阅我的答案)。

4

3 回答 3

29

在尝试 sakra 的有效答案(就 CMake 的行为而言有效)失败后,我进行了一番挖掘,发现如果我--sysroot向编译器指定标志,它似乎使用了正确的 SDK!

但是,当我针对 10.7(我在 10.8 中看不到)进行编译时,我现在看到了这个错误:

Undefined symbols for architecture i386:
  "_NXArgv", referenced from:
      execSelfNonDaemonized() in libarch.a(CArchDaemonUnix.o)
      CArchDaemonUnix::daemonize(char const*, int (*)(int, char const**)) in libarch.a(CArchDaemonUnix.o)
ld: symbol(s) not found for architecture i386
clang: error: linker command failed with exit code 1 (use -v to see invocation)
make[2]: *** [bin/synergyc] Error 1
make[1]: *** [src/cmd/synergyc/CMakeFiles/synergyc.dir/all] Error 2
make: *** [all] Error 2

注意:CArchDaemonUnix是 Synergy 中的一个类(我正在研究的一个开源项目)。

更新:

刚刚在我的 10.6 安装上尝试过这个,当我尝试为 10.5 编译时遇到链接器错误——结果你还需要指定MACOSX_DEPLOYMENT_TARGET环境变量!

无论如何,这就是我在 Mountain Lion (OSX 10.8) 上运行以编译 10.7 时所做的事情:

命令行:

MACOSX_DEPLOYMENT_TARGET=10.7

cmake -G "Unix Makefiles" -DCMAKE_OSX_SYSROOT=/Developer/SDKs/MacOSX10.7.sdk/ -DCMAKE_OSX_DEPLOYMENT_TARGET=10.7 ../..

CMakeLists.txt:

set(CMAKE_CXX_FLAGS "--sysroot ${CMAKE_OSX_SYSROOT} ${CMAKE_CXX_FLAGS}")

我希望这可以帮助别人!:-)

于 2012-05-11T23:41:16.183 回答
6

在您的 CMakeLists.txt 中添加以下命令

设置(CMAKE_OSX_SYSROOT macosx10.10)

设置(CMAKE_OSX_DEPLOYMENT_TARGET “10.5”)

这应该没问题。

于 2016-02-10T11:34:32.657 回答
3

您可以在配置项目时将变量设置CMAKE_OSX_SYSROOT为所选的 SDK。例如:

cmake -DCMAKE_OSX_SYSROOT=/Developer/SDKs/MacOSX10.4u.sdk/ ..

请参阅此处的文档。

另请注意,2.8.8 之前的 CMake 版本不支持Xcode 4.3。

于 2012-04-16T07:32:27.117 回答