S.R*_*ond 18 c++ macos xcode cmake c++11
我有一个纯C++ 11 DLL(没有任何类型的依赖)我已经能够在Linux和Windows上编译一段时间了,现在使用CMake生成项目文件并使/ MSVC在每个相应的本机系统中编译.
我想现在在OSX上编译,我遇到很多问题让CMake在XCode中设置正确的项目设置来编译DLL.
软件版本:
XCode v5.0
CMake v2.8.12
Run Code Online (Sandbox Code Playgroud)
相关的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")
Run Code Online (Sandbox Code Playgroud)
但是,设置无法正确进入XCode项目文件:
您可以看到CMake命令进入"其他C++标志"区域.但是XCode仍然无法编译.但是,如果我将'C++标准库'变量更改为'libc ++',它将编译正常.
注意:我可以发布编译错误日志但是我认为上面正确地确定了根本原因 - 我只需要知道CMake命令实际上在上面设置了正确的XCode属性.
对于最小的测试项目,以下工作:
SET(CMAKE_XCODE_ATTRIBUTE_CLANG_CXX_LIBRARY "libc++")
Run Code Online (Sandbox Code Playgroud)
也许它干扰了以下几行:
set(CMAKE_CXX_FLAGS "${CMAKE_C_FLAGS} -std=c++0x -stdlib=libc++")
Run Code Online (Sandbox Code Playgroud)
在这一行上还有一个评论,是${CMAKE_C_FLAGS}
有意图,还是你的意思${CMAKE_CXX_FLAGS}
?
小智 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++")
Run Code Online (Sandbox Code Playgroud)