在Mac上配置C++23开发环境

C++23发布有一段时间了,有很多实用又好用的特性,实在想尽快在自己的项目中用起来。但是Mac OS自带的C++环境还是clang14,对C++23特性的支持还差了很多,需要动手捣鼓一番。

安装

clang是LLVM工具集中的一个编译器前端,为了用上C++23的特性,我们不妨将LLVM升级到最新版,目前是19。在Mac OS上基于 brew 用一行命令即可完成安装:

brew install llvm 

安装完成后,可以看到一些包安装成功后的路径,以我的安装结果为例,lLLVM被安装到了:

/usr/local/opt/llvm 

这个目录下可以看到一系列重要的内容,例如bin,头文件和动态链接库

到这一步,算是完成了安装。

配置

安装完成后,还需要一些简单的配置,让最新版本的LLVM工具集变得可用,并且能和我们的工具链配合起来。

首先修改环境变量,让LLVM全局可见,向shell的环境变量中以我的为例在.zshrc中加入如下配置:

export LLVM_HOME=/usr/local/opt/llvm
export PATH=$LLVM_HOME/bin:$PATH

加入上面的配置后,全局中就可以使用clang, clang++等一系列工具了。

为了编译的时候配置可以更简洁一些,还需要加入一些额外的配置,让编译器clang/clang++工作时可以有更多的上下文。

export LDFLAGS="-L/usr/local/opt/llvm/lib"
export CPPFLAGS="-I/usr/local/opt/llvm/include"

有了这些配置,编译器工作时,会自动寻找最新的LLVM配套的头文件和链接库,这样就不用每次编译的时候额外写那么许多编译配置。

除此之外,一些新的特性不是实现为一个语法规则,而是实现为一个库。要用到完整的C++23的特性,我们需要使用最新的标准库的实现libc++。那么继续加入如下的配置:

export CPLUS_INCLUDE_PATH="$LLVM_HOME/include/c++/v1:$CPLUS_INCLUDE_PATH"
export LIBRARY_PATH="$LLVM_HOME/lib:$LLVM_HOME/lib/c++:$LIBRARY_PATH"
export LD_LIBRARY_PATH="$LLVM_HOME/lib:$LLVM_HOME/lib/c++:$LD_LIBRARY_PATH"

至此,基础的配置就完成了。

和xmake的结合

CMake的语法实在是不够贴心,自己开发的时候,我更喜欢用xmake,配置简单,功能也很强大。一个xmake的c++工程中,有一个xmake.lua的文件,在前面的一系列配置的基础上,我们只需要对它稍作修改,就能用到C++23特性。

设置语言版本,添加配置

set_toolchains("clang")
set_languages("c99", "c++23")

链接libc++库,使用最新的标准库实现

add_cxxflags("-stdlib=libc++")
add_ldflags("-stdlib=libc++")

执行xmake -v命令可以看到完整的编译命令:

测试

配置完成了,接下来测试一下效果,我们选取两个C++23中比较有代表性的特性来测试一下整个环境配置是否成功。

  1. if consteval
  2. std::print

前者涉及新的语法规则,后者则涉及新的标准库实现。

#include 

consteval int compile_time_math(int x) {
  // C++23 新特性
  if consteval {
    return x * x;
  } else {
    return x;
  }
}

int main(int argc, char** argv) {
  constexpr int val = compile_time_math(5);
  std::println("C++23 test: {}", val);

  return 0;
}

编译执行,预期能打印出"C++23 test: 25" 。


好了,可以尽情的使用C++最新的特性来创造世界了。

原文链接:,转发请注明来源!