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

时间:2023-01-06 23:20:02

I have a pure C++11 DLL (No dependencies of any kind) I have been able to compile on Linux and Windows for some time now using CMake to generate the project files and make/MSVC to compile in each respective native system.

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

I want to compile on OSX now and I have been having a lot of problems getting CMake to set the correct project settings in XCode to compile the DLL.

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

Software versions:

XCode v5.0
CMake v2.8.12

The relevant CMake script code:

相关的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")

However the settings do not correctly come through into the XCode project file:

但是,设置无法正确进入XCode项目文件:

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

You can see that the CMake commands make their way into the 'Other C++ Flags' area. But XCode will still fail to compile. However, if I change the 'C++ Standard Library' variable to 'libc++' it will compile fine.

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

Note: I could post the compile error logs however I think that the above correctly identifies the root cause - I just need to know what CMake command actually sets the correct XCode property above.

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

2 个解决方案

#1


8  

For a minimal test project the following does the job:

对于最小的测试项目,以下工作:

SET(CMAKE_XCODE_ATTRIBUTE_CLANG_CXX_LIBRARY "libc++")

Maybe it's interfering with the following line:

也许它干扰了以下行:

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

Also one remark on this line, is there the ${CMAKE_C_FLAGS} on intention, or did you really mean ${CMAKE_CXX_FLAGS}?

在这一行上还有一个评论,是有$ {CMAKE_C_FLAGS}意图,还是你的意思是$ {CMAKE_CXX_FLAGS}?

#2


4  

you can use set_property

你可以使用set_property

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++")

#1


8  

For a minimal test project the following does the job:

对于最小的测试项目,以下工作:

SET(CMAKE_XCODE_ATTRIBUTE_CLANG_CXX_LIBRARY "libc++")

Maybe it's interfering with the following line:

也许它干扰了以下行:

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

Also one remark on this line, is there the ${CMAKE_C_FLAGS} on intention, or did you really mean ${CMAKE_CXX_FLAGS}?

在这一行上还有一个评论,是有$ {CMAKE_C_FLAGS}意图,还是你的意思是$ {CMAKE_CXX_FLAGS}?

#2


4  

you can use set_property

你可以使用set_property

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++")