作为一名程序员,一定要学一下C语言和C++,因此本帖记录下在MacOS环境中进行C++学习的开发环境配置步骤,以及各种编译器的安装。如有错误,还望指正。

前置条件

  • 电脑:macOS BigSur Version 11.2.3(20D91)
  • 工具:homebrew
  • IDE:JetBrains Clion

安装编译器

Xcode Command Line Tools 安装

首先我们需要安装 command line tools,可以参考 How to Install Xcode Command Line Tools on a Mac 完成这一步之后,我们会拥有 gccg++这两款编译器(事实上安装的clang),即 Apple 官方默认的编译器,安装位置在 /usr/bin
到这里
验证是否安装完成:

MBP cpp_practice % gcc --version
Configured with: --prefix=/Library/Developer/CommandLineTools/usr --with-gxx-include-dir=/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/4.2.1
Apple clang version 12.0.5 (clang-1205.0.22.9)
Target: x86_64-apple-darwin20.3.0
Thread model: posix
InstalledDir: /Library/Developer/CommandLineTools/usr/binMBP cpp_practice % g++ --version
Configured with: --prefix=/Library/Developer/CommandLineTools/usr --with-gxx-include-dir=/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/4.2.1
Apple clang version 12.0.5 (clang-1205.0.22.9)
Target: x86_64-apple-darwin20.3.0
Thread model: posix
InstalledDir: /Library/Developer/CommandLineTools/usr/bin

brew 安装

通过 brew 安装就简单很多,当然国内有网速的问题,因此我们首先需要设置 homebrew 的源,可以参考 Homebrew / Linuxbrew 镜像使用帮助
直接输入 brew install gcc 即可安装成功,默认安装的位置在 /usr/local/bin
此时我们 PATH 中会有两个 gcc,可以通过设置 PATH 来设置默认的 gcc,比如想奖 brew安装的 gcc 放在前面,只需要在 PATH设置中将 /usr/local/bin 放在 /usr/bin 前面即可,关于 PATH 的设置,可以参考 Mac环境变量PATH的配置
验证是否安装完成:

MBP cpp_practice % gcc-11 --version
gcc-11 (Homebrew GCC 11.2.0_1) 11.2.0
Copyright (C) 2021 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

C++标准

C++ 发展至今出现过不同的标准,如果是一些使用新标准开发的代码就需要使用支持该标准的编译器进行编译,我们可以使用 __cplusplus 来查看当前编译器支持的标准,示例代码如下。

#include <iostream>int main() {std::cout << "Hello, World!" << std::endl;std::cout << __cplusplus << std::endl;
#if __cplusplus == 201402Lstd::cout << "C++14" << std::endl;
#elif __cplusplus == 201103Lstd::cout << "C++11" << std::endl;
#elsestd::cout << "c/c++" << std::endl;
#endifreturn 0;
}

我们键入以下命令来进行编译和执行上述代码。

注意如果出现Undefined symbols,又不属于自己代码里的结构,那么很大部分原因是库函数引用出错,编译项里加 -lstdc++

// default gcc
MBP cpp_practice % gcc c++ver.cpp -o default-gcc-c++compiler -lstdc++
MBP cpp_practice % ./default-gcc-c++compiler
Hello, World!
199711
c/c++// default g++
MBP cpp_practice % g++ c++ver.cpp -o default-g++-c++compiler
MBP cpp_practice % ./default-g++-c++compiler
Hello, World!
199711
c/c++// brew gcc
MBP cpp_practice % gcc-11 c++ver.cpp -o gcc11-c++compiler -lstdc++
ld: warning: dylib (/usr/local/Cellar/gcc/11.2.0_1/lib/gcc/11/libstdc++.dylib) was built for newer macOS version (11.5) than being linked (11.2)
MVP cpp_practice % ./gcc11-c++compiler
Hello, World!
201703
c/c++// brew g++
MBP cpp_practice % g++-11 c++ver.cpp -o g++-11-c++compiler
ld: warning: dylib (/usr/local/Cellar/gcc/11.2.0_1/lib/gcc/11/libstdc++.dylib) was built for newer macOS version (11.5) than being linked (11.2)
MBP cpp_practice % ./g++-11-c++compiler
Hello, World!
201703
c/c++// default clang
MBP cpp_practice % clang c++ver.cpp -o clang-c++complier
ld: warning: dylib (/usr/local/Cellar/gcc/11.2.0_1/lib/gcc/11/libstdc++.dylib) was built for newer macOS version (11.5) than being linked (11.2)
MBP cpp_practice %  ./clang-c++complier
Hello, World!
199711
c/c++

cppreference has information on the standard values of the __cplusplus macro in the section “Predefined macros.” Currently the standard values are:
199711L (C++98 or C++03)
201103L (C++11)
201402L (C++14)
201703L (C++17)
202002L (C++20)

上述代码用到了 __cplusplus, 该值体现了当前编译器使用的c++标准 可以看Apple编译器 clang 默认使用C++98或者C++03,所以当使用更高C++标准开发的代码时必须使用 -std 指定对应的标准,如何确定自己的编译器支持的标准以及默认标准,可以使用 man gcc 来进行查看

Reference

  1. C++ newbie tour: getting started with c++ on mac osx
  2. mac上使用g++编译出错“Undefined symbols for architecture x86_64:” 错误解决办法
  3. How to Install Xcode Command Line Tools on a Mac
  4. Is there a standard definition for __cplusplus in c++14?
  5. C++ preprocessor macro __cplusplus
  6. 如何确定gcc是否支持c11,c14,c17

MacOS配置C++开发环境相关推荐

  1. MacOS 配置 go 开发环境

    其实很简单,都没啥必要写,只是我最近新配了一台黑苹果,正好又重新捣鼓了一下各种初始配置,记一下,这样以后就不用再动脑了. 和 nodejs 一样,我都是用 HomeBrew 直接安装的,相对于直接下安 ...

  2. Flutter系列之在 macOS 上安装和配置 Flutter 开发环境

    本文为Flutter开发环境在macOS下安装全过程: 一.系统配置要求 想要安装并运行 Flutter,你的开发环境需要最低满足以下要求: 操作系统:macOS(64位) 磁盘空间:700 MB(不 ...

  3. 超级无敌VS Code配置Java开发环境教程

    如何在VS Code配置Java开发环境 参考翻译自官方文档:https://code.visualstudio.com/docs/java/java-tutorial 1.建立VS Code的Jav ...

  4. 从零开始,教你如何安装、配置Python开发环境,Python入门安装教程,超级详细

    近日,我鼓起勇气从头开始正儿八经地配置一个更轻量.更趁手的 Python 开发环境.经过一番折腾,我比较顺利地在 Windows 10 上配置了一个比较满意的 Python 环境: 安装稳定版本的 P ...

  5. Go 学习笔记(1)— Ubuntu 系统 Go 环境搭建、VS Code 配置 Go 开发环境、VS Code 远程开发配置

    1. 安装说明 Ubuntu 下直接安装 Go 1.11 版本编译器时需要依赖 Go 1.4 版本.所以如果在使用 apt-get install go安装时参考以下链接安装:https://blog ...

  6. 配置Android开发环境(fedora)

    配置Android开发环境(fedora) 最进看见google的Android,体会了下,按照官网上的配置了下,后编了个Hello Android结果发现没能传到模拟器上:于是在windows xp ...

  7. Ubuntu Linux下如何配置Android开发环境

    下载和安装Win7系统Android开发环境中讲了怎样在Win7系统中安装Android开发环境,那么怎样在Linux系统中配置Android开发环境呢?本篇文章就将演示如何使用Eclipse.And ...

  8. Ubuntu 配置 Android 开发 环境

    . 果断换Ubuntu了, Ubuntu的截图效果不好, 不能设置阴影 ... 作者 : 万境绝尘 转载请注明出处 : http://blog.csdn.net/shulianghan/article ...

  9. Mac环境下配置Java开发环境(jdk+maven+tomcat+idea)

    记录下在Mac环境下配置java开发环境,包括jdk,maven,tomcat和idea 下载及安装jdk 首先到官网下载jdk,这里就用目前官网最新的9.0.4 无脑双击安装就可以: 配置jdk 进 ...

最新文章

  1. c语言中的if语句_If ... C中的其他语句解释
  2. 我对VTP的一点心得
  3. jQuery 动感的横向柱状形投票统计图
  4. JAVA中File类的使用
  5. angular做的简单购物车
  6. outermost shell_outermost是什么意思_outermost的翻译_音标_读音_用法_例句_爱词霸在线词典...
  7. Hibernate标准查询
  8. jQuery实例——表格隔行换色
  9. Flutter实战之AS快键键
  10. 学报格式和论文格式一样吗_学报格式
  11. 固态硬盘能不能提高计算机速度,固态硬盘掉速如何解决?几招轻松提升SSD速度方法 (全文)...
  12. 李航老师《统计学习方法》及相关资源(代码、课件)的汇总及下载
  13. SpringMVC在返回JSON数据时出现406错误解决方案
  14. 算法分析与设计 作业1
  15. ethtool如何让接口闪灯_如何使用ethtool命令操作以太网卡
  16. .NET Core、DNX、DNU、DNVM、MVC6学习资料
  17. 论文阅读笔记——Multi-Label Learning with Global and Local Label Correlation(具有全局和局部标签相关性的多标签学习)
  18. MySQL 之 DQL
  19. 超星2017大学计算机基础答案 全,超星2017大学计算机基础答案(全)
  20. 【L2-026 小字辈】天梯赛L2系列详解

热门文章

  1. java 对接微信公众号(一)获取token
  2. optix资料(基于optix7.0)——错误
  3. 千川投手必知: 直播间流量起飞深度分析(逐字稿)
  4. qt开发是使用QT creator 还是用VS+qt?
  5. 在ubuntu下使用Vim学习C++
  6. js递归理解及使用案例
  7. 数学建模Word排版——样式
  8. stm32十六进制字符串转十进制数值代码
  9. 人工智能快速发展,目前的人工智能处于什么阶段?
  10. 《摄影测量学基础》光束法MATLAB程序