相关疑难解决方法(0)

使用CMake在GCC和Clang/LLVM之间切换

我有许多使用CMake构建的项目,我希望能够轻松地在使用GCC或Clang/LLVM进行编译之间进行切换.我相信(请纠正我,如果我错了!)使用Clang我需要设置以下内容:

    SET (CMAKE_C_COMPILER             "/usr/bin/clang")
    SET (CMAKE_C_FLAGS                "-Wall -std=c99")
    SET (CMAKE_C_FLAGS_DEBUG          "-g")
    SET (CMAKE_C_FLAGS_MINSIZEREL     "-Os -DNDEBUG")
    SET (CMAKE_C_FLAGS_RELEASE        "-O4 -DNDEBUG")
    SET (CMAKE_C_FLAGS_RELWITHDEBINFO "-O2 -g")

    SET (CMAKE_CXX_COMPILER             "/usr/bin/clang++")
    SET (CMAKE_CXX_FLAGS                "-Wall")
    SET (CMAKE_CXX_FLAGS_DEBUG          "-g")
    SET (CMAKE_CXX_FLAGS_MINSIZEREL     "-Os -DNDEBUG")
    SET (CMAKE_CXX_FLAGS_RELEASE        "-O4 -DNDEBUG")
    SET (CMAKE_CXX_FLAGS_RELWITHDEBINFO "-O2 -g")

    SET (CMAKE_AR      "/usr/bin/llvm-ar")
    SET (CMAKE_LINKER  "/usr/bin/llvm-ld")
    SET (CMAKE_NM      "/usr/bin/llvm-nm")
    SET (CMAKE_OBJDUMP "/usr/bin/llvm-objdump")
    SET (CMAKE_RANLIB  "/usr/bin/llvm-ranlib")
Run Code Online (Sandbox Code Playgroud)

是否有一种在这些和默认GCC变量之间切换的简单方法,最好是作为系统范围的变更而不是项目特定的(即不只是将它们添加到项目的CMakeLists.txt中)?

另外,llvm-*在使用clang而不是gcc编译时是否有必要使用程序而不是系统默认值?有什么不同?

cmake llvm clang

256
推荐指数
9
解决办法
21万
查看次数

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

我有一个纯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属性.

c++ macos xcode cmake c++11

18
推荐指数
2
解决办法
1万
查看次数

标签 统计

cmake ×2

c++ ×1

c++11 ×1

clang ×1

llvm ×1

macos ×1

xcode ×1