20

我有一个纯 C++11 DLL(没有任何类型的依赖项)我已经能够在 Linux 和 Windows 上编译一段时间了,现在使用 CMake 生成项目文件并使用 make/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 项目文件:

在此处输入图像描述

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

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

4

2 回答 2

9

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

SET(CMAKE_XCODE_ATTRIBUTE_CLANG_CXX_LIBRARY "libc++")

也许它干扰了以下行:

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

在这条线上还有一个评论,是否${CMAKE_C_FLAGS}有意图,或者你真的是这个意思${CMAKE_CXX_FLAGS}

于 2013-10-15T22:16:23.860 回答
5

你可以使用 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++")
于 2014-02-04T04:07:03.070 回答