C++ CMake可以在Mac OS X上指定基本SDK吗?
有人知道如何指定Mac OS X SDK来使用CMake构建吗?我搜索了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.
cmakemac“base sdk”
,但没有找到任何结果
我正在使用CMake生成Unix Make文件
更新
在我的10.6安装中,我看到/Developer/SDKs
具有以下功能:
- MacOSX10.4u.sdk
- MacOSX10.5.sdk
- MacOSX10.6.sdk
- MacOSX10.6.sdk
- MacOSX10.7.sdk
妈的,我才意识到实际上我没有使用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}")