如何通过命令行编译并运行程序之macOS版本

2019-11-01 / C macOS

引言:前文部分可先查看另一篇文章 如何通过命令行编译并运行程序之Windows版本

0x00 安装 gcc 编译器

通过键盘组合键 command + 空格 可以打开 Spotlight 进行搜索,输入 Terminal 可以打开macOS下的终端。打开之后输入 gcc --version 可以查看是否安装了 gcc 编译器,如果没有安装的话,系统会自动弹出下载安装 Command Line Tools 对话框。

在安装之后输入 gcc --version 可以查看安装的 gcc 信息。

> 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 11.0.0 (clang-1100.0.33.8)
Target: x86_64-apple-darwin19.0.0
Thread model: posix
InstalledDir: /Library/Developer/CommandLineTools/usr/bin

0x01 命令行的基本使用

  1. ls 查看文件及文件夹列表

    • ls 默认方式查看当前目录下的文件及文件夹列表
    • ls -a 查看当前目录下所有文件及文件夹列表(包括隐藏文件)
    • ls -l 列表形式查看当前目录下的文件及文件夹列表
    • ls -la 列表形式查看当前目录下所有文件及文件夹列表(包括隐藏文件)
    • ls -Slh 列表形式按文件从大到小排列查看当前目录下文件及文件夹列表
    • ls ~/Desktopls 命令后面加上目录名称可查看此目录下的文件及文件夹内容。当然 ls 后面依旧可以使用上路控制开关,如 -a , -la 等。
  2. cd 切换目录

    目录的使用有两种使用方法,一种是相对路径,一种是绝对路径

    相对路径是与当前目录直接相关,如当前目录为 /Users/ismdeep/Desktop 那么 /Users/ismdeep/Documents 就相对为 ../Documents.. 表示上一级目录,. 表示当前目录。)

    又例如:当前目录为 /Users/ismdeep/Desktop 那么 /Users/ismdeep/Desktop/tmp 就相对为 ./tmptmp

    绝对路径则与当前目录无关。直接从根目录开始按层级往下写则为绝对路径。例如:/Users/ismdeep/Desktop

    • cd ../Documents 相对路径切换目录方式。切换至上级目录下的 Documents 子目录。
    • cd tmp 相对路径切换目录方式。切换至当前目录下的 tmp 子目录
    • cd /Users/ismdeep/Documents 绝对路径切换目录方式。切换至 /Users/ismdeep/Documents
  3. mkdir 创建目录

    mkdir tmp 在当前目录下创建名为 tmp 的子目录。

  4. clear 清空屏幕内容

  5. gcc 编译程序

0x02 编写第一个程序

  1. 打开 Terminal 或者 iTerm2 等终端程序。(笔者非常推荐使用 iTerm2 终端程序,读者可自行通过网上教程进行安装配置 iTerm2 + zsh + oh-my-zsh 环境。《iTerm2 + Oh My Zsh 打造舒适终端体验》)
  2. cd ~/Desktop 切换工作目录至桌面。(当然你也可以切换到其他目录)
  3. mkdir codes 新建一个名为 codes 的空白目录。
  4. cd codes 切换进这个 codes 目录。
  5. touch main.c 新建名为 main.c 的文件。
  6. 通过代码编辑器打开 codes 目录下的 main.c 文件。(代码编辑器有非常多,比如:vim, sublime text 3, vscode等。)
  7. gcc main.c -o main 通过 gccmain.c 编译成可执行程序 main .
  8. ./main 执行可执行程序 main

0x03 gcc/g++/c++ 编译器命令详解。

gcc 用来编译 C 源程序,g++c++ 用来编译 C++ 源程序。有些系统上 g++c++ 其实是同一个。而这三个命令使用方式均是一样的。下面只介绍 gcc 的,另外两个依此类推。

  1. gcc main.c 这是最简单的编译方式,编译 main.c 这个源程序,编译成功之后会在当前目录下生成一个名为 a.out 的可执行程序。
  2. gcc main.c -o main 在最简单的编译方式基础上增加了 -o main 表示编译成功后生成名为 main 的可执行程序。
  3. gcc -g main.c -o main 编译时生成 debug 有关的程序信息。
  4. gcc main.c -I./include -o main 编译时将 ./include 文件夹加入头文件搜索目录。如 ./include 目录下有 util.h 文件,则源代码中可以直接写 #include <util.h>
  5. gcc main.c -DONLINE_JUDGE -o main 编译时加入 ONLINE_JUDGE 宏定义。目前几乎所有的在线测评系统都会使用 -DONLINE_JUDGE 编译时宏定义。
  6. gcc -Wall main.c -o main 编译时输出所有的错误和警告。
  7. gcc -std=c99 main.c -o main 编译时指定使用的语言标准。可以有 -std=c++11, -std=c89, -std=c99, -std=c11