C++ 什么CMake变量用于设置C++;XCode中的标准库?

C++ 什么CMake变量用于设置C++;XCode中的标准库?,c++,xcode,macos,c++11,cmake,C++,Xcode,Macos,C++11,Cmake,我有一个纯C++11 DLL(没有任何依赖项),我已经能够在Linux和Windows上编译一段时间了,现在使用CMake生成项目文件,并使/MSVC在每个本机系统中编译 我现在想在OSX上编译,我在让CMake在XCode中设置正确的项目设置来编译DLL时遇到了很多问题 软件版本: XCode v5.0 CMake v2.8.12 相关的CMake脚本代码: # Set output directory if Apple OSX: IF(${CMAKE_SYSTEM_NAME} MATCHE

我有一个纯C++11 DLL(没有任何依赖项),我已经能够在Linux和Windows上编译一段时间了,现在使用CMake生成项目文件,并使/MSVC在每个本机系统中编译

我现在想在OSX上编译,我在让CMake在XCode中设置正确的项目设置来编译DLL时遇到了很多问题

软件版本:

XCode v5.0
CMake v2.8.12
相关的CMake脚本代码:

# Set output directory if Apple OSX:
IF(${CMAKE_SYSTEM_NAME} MATCHES "Darwin")
    message("CMAKE HAS DETECTED A OSX SYSTEM - BUILDING FOR XCODE!")

    set(CMAKE_XCODE_ATTRIBUTE_GCC_VERSION "com.apple.compilers.llvm.clang.1_0")
    set(CMAKE_XCODE_ATTRIBUTE_CLANG_CXX_LANGUAGE_STANDARD "c++0x")
    set(CMAKE_XCODE_ATTRIBUTE_CLANG_CXX_LIBRARY "libc++")
    set(CMAKE_CXX_FLAGS "${CMAKE_C_FLAGS} -std=c++0x -stdlib=libc++")

    IF(CMAKE_BUILD_TYPE MATCHES Release)
        SET(LIBRARY_OUTPUT_PATH ${CMAKE_CURRENT_SOURCE_DIR}/../bin/OSX/Release)
    ENDIF(CMAKE_BUILD_TYPE MATCHES Release)
    IF(CMAKE_BUILD_TYPE MATCHES Debug)
        SET(LIBRARY_OUTPUT_PATH ${CMAKE_CURRENT_SOURCE_DIR}/../bin/OSX/Debug)
    ENDIF(CMAKE_BUILD_TYPE MATCHES Debug)
ENDIF(${CMAKE_SYSTEM_NAME} MATCHES "Darwin")
但是,这些设置无法正确进入XCode项目文件:

<>你可以看到CMASE命令进入“其他C++标志”区域。但是XCode仍然无法编译。但是,如果我将“C++标准库”变量更改为“libc++”,它将可以正常编译


注意:我可以发布编译错误日志,但是我认为上面正确地标识了根本原因-我只需要知道上面的CMake命令实际设置了正确的XCode属性。

对于最小测试项目,以下操作完成:

SET(CMAKE_XCODE_ATTRIBUTE_CLANG_CXX_LIBRARY "libc++")
也许它干扰了下面的线路:

set(CMAKE_CXX_FLAGS "${CMAKE_C_FLAGS} -std=c++0x -stdlib=libc++")

在这一行还有一句话,是不是有关于意图的
${CMAKE\u C\u FLAGS}
,还是你真的是指
${CMAKE\u CXX\u FLAGS}

你可以使用set\u属性

macro (set_xcode_property TARGET XCODE_PROPERTY XCODE_VALUE)
set_property (TARGET ${TARGET} PROPERTY XCODE_ATTRIBUTE_${XCODE_PROPERTY}
    ${XCODE_VALUE})
endmacro (set_xcode_property)

set_xcode_property(${your_target_name} CLANG_CXX_LANGUAGE_STANDARD "c++0x")
set_xcode_property(${your_target_name} CLANG_CXX_LIBRARY "libc++")

我尝试过禁用所有其他相关的SET函数,但没有成功。你能确认你运行的是什么版本的CMake和XCode吗?我正在运行CMake v2.8.12和XCode v5.0。您可能已经看过了。不管怎么说,在使用Maverks的较新版本中,xcode在默认情况下启用了C++11.Yep。这帮不上忙。我肯定很快就会把这个给你。你能提供一些关于set_property()在哪里被记录的信息,以及为什么人们会使用它而不仅仅是set()吗?