CMake可以在Mac OS X上指定基本SDK吗?

Nic*_*ton 13 c++ macos cmake

有谁知道如何指定Mac OS X SDK与CMake一起构建?我已经搜索了cmake mac "base sdk"但是没有发现任何事情.

我正在使用CMake生成Unix makefile.

更新

在我的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开发人员预览(有一些奇怪的结果,请参阅我的回答).

Nic*_*ton 26

在尝试了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
Run Code Online (Sandbox Code Playgroud)

注意: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 ../..
Run Code Online (Sandbox Code Playgroud)

的CMakeLists.txt:

set(CMAKE_CXX_FLAGS "--sysroot ${CMAKE_OSX_SYSROOT} ${CMAKE_CXX_FLAGS}")
Run Code Online (Sandbox Code Playgroud)

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


小智 5

在 CMakeLists.txt 上添加以下命令

设置(CMAKE_OSX_SYSROOT macosx10.10)

设置(CMAKE_OSX_DEPLOYMENT_TARGET“10.5”)

这应该没问题。