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

C++ CMake可以在Mac OS X上指定基本SDK吗?,c++,macos,cmake,C++,Macos,Cmake,有人知道如何指定Mac OS X SDK来使用CMake构建吗?我搜索了cmakemac“base sdk”,但没有找到任何结果 我正在使用CMake生成Unix Make文件 更新 在我的10.6安装中,我看到/Developer/SDKs具有以下功能: MacOSX10.4u.sdk MacOSX10.5.sdk MacOSX10.6.sdk 也许我可以让CMake以某种方式将其中一条路径传递给编译器 此外,我的10.7安装仅具有: MacOSX10.6.sdk MacOSX10.7.

有人知道如何指定Mac OS X SDK来使用CMake构建吗?我搜索了
cmakemac“base sdk”
,但没有找到任何结果

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

更新 在我的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开发者预览版(有一些奇怪的结果,请参见我的答案)。

您可以在配置项目时将变量
CMAKE\u OSX\u SYSROOT
设置为所选SDK。例如:

cmake -DCMAKE_OSX_SYSROOT=/Developer/SDKs/MacOSX10.4u.sdk/ ..
请参阅文档


还请注意,2.8.8之前的CMake版本使用的是Xcode 4.3。

在尝试sakra的有效答案(就CMake的行为而言是有效的)失败后,我仔细研究了一下,发现如果我为编译器指定了
--sysroot
标志,它似乎使用了正确的SDK

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

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

更新: 刚刚在我的10.6安装中尝试了这一点,在尝试编译10.5时,我遇到了一个链接器错误——结果表明,您还需要指定
MACOSX\u部署\u目标
环境变量

不管怎样,当我在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}")

我希望这对某人有帮助!:-)

在CMakeLists.txt上添加以下命令

设置(CMAKE_OSX_系统根macosx10.10)

设置(CMAKE_OSX_部署_目标“10.5”)


这应该没问题。

关于问题的最后一部分,XCode4不支持为10.4或10.5构建目标(PPC目标)-它仅限于Intel。有一些阅读材料。这个StackOverflow问题讨论了在10.7Xcode 4下为10.4或10.5构建。有趣的一点,谢谢你的提醒。这似乎对我不起作用。我将此添加到我的cmake命令中:
-DCMAKE_OSX_SYSROOT=/Developer/SDKs/MacOSX10.7.sdk/
——但是,
MAC_OS_VERSION_10_8
宏仍然被定义。我还尝试设置了
cmake_OSX_部署目标
,但这也没有什么区别。有趣的是,我添加了
消息(“SYSROOT”)=${CMAKE_OSX_SYSROOT}”)
到Darwin.cmake,它确实打印出了我指定的路径。所以你的答案似乎是正确的,但也许cmake发生了一些奇怪的事情?很高兴看到有人试图在mac上修复synergy!)这太棒了。另外,cmake似乎忽略了是否设置了
cmake\u OSX\u DEPLOYMENT\u TARGET
它与MACOSX\u DEPLOYMENT\u TARGET中的任何东西一起使用。前者可能是供CMake或其他公司内部使用的。非常有用。谢谢!
set(CMAKE_CXX_FLAGS "--sysroot ${CMAKE_OSX_SYSROOT} ${CMAKE_CXX_FLAGS}")