Part 1、编译器

一、 安装gcc/g++编译器

一)WSL或者虚拟机中的Linux

这里以在Ubuntu中安装gcc/g++版本14为例。这个版本支持最新(但不是全部)的C23/C++23标准。

注意:这要求Ubuntu版本是24.04及以上。如果版本较低,那么请先升级Ubuntu内核至少到24.04。如果暂时不能,那么可以暂时使用gcc/g++版本13。

  1. 卸载旧版本

    在终端中发出如下命令之一:

     gcc -v
     g++ -v
    

    如果系统显示命令找不到,那么请直接跳到步骤2。

    如果显示的主版本号低于13(例如是12),那么先卸载它:

     sudo apt remove gcc-12 g++-12 -y
    
  2. 安装最新版

    在终端中发出如下命令:

     sudo apt install gcc-14 g++-14 -y
    
  3. 清除原有默认设置

    如果你是第一次安装gcc/g++,请跳过这一步。

    在终端中发出如下命令:

     sudo update-alternatives --remove-all gcc
     sudo update-alternatives --remove-all g++
    

    请忽略可能出现的提示信息。

  4. 将gcc设为默认编译器
    • 方法1:在终端中发出如下命令:
        sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-14 20
        sudo update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-14 20
      
    • 方法2:在终端中发出如下命令:
        cd /usr/bin
        sudo ln -fs gcc-14 gcc
        sudo ln -fs g++-14 g++
      
  5. 验证是否设置成功 在终端中发出如下命令:
     gcc -v
     g++ -v
    

    如果看到显示的最后一行中,主版本号为14,那么设置就成功了。

二)macOS

一般情况下,macOS自带了clang编译器,并且默认gccclang的一个符号链接。

  1. 验证gcc是否存在

    在终端中发出如下命令:

     clang -v
     gcc -v
     clang++ -v
     g++ -v
    

    如果上述四条命令都正确显示了版本号,那么就直接跳到大标题二。

  2. 如果gcc不存在

    在终端中发出如下命令:

     which clang
    

    可能会显示:/usr/bin/clang。接着发出如下命令:

     cd /usr/bin
     sudo ln -fs clang gcc
    

    设置g++可以仿照着做。

二、编辑源程序

注意:根据你正在学习的语言,你只需要编辑一种语言的程序就行。

一)使用C编译器

VS Code,按CTRL+N新建一个文件,在编辑窗口中输入内容:

#include <stdio.h>

int main() {
    printf("Hello!\n");
    return 0;
}

然后,按CTRL+S保存为(二者之一):

  • WSL

    选择D盘,然后在文件名输入栏中输入f.c

    这个文件在Windows下的路径是:D:\f.c,在WSL中对应的路径是:/mnt/d/f.c

    注:如果你没有D盘,那么就将其保存到C盘根目录下。

  • 虚拟机或者macOS

    选择目录~,然后在文件名输入栏中输入f.c。这个文件路径是:~/f.c

二)使用C++编译器

打开VS Code,新建并编辑如下文件:

#include <iostream>

int main() {
    std::cout << "Hello!" << std::endl;
    return 0;
}

保存为f.cpp,保存路径参照上述C的情况。


三、测试编译器

注意:根据你正在学习的语言,你只需要用到gcc和g++之一就行了。

一)使用C编译器gcc

  1. 常规使用

    打开终端,在其中发出如下命令来编译链接:

    • WSL
        cd /mnt/d
        gcc f.c
      
    • 虚拟机或macOS
        cd ~
        gcc f.c
      

      如果没有出现任何信息,那么就表明代码无错,并且生成了可执行文件。

    这里,我们使用了默认方式生成可执行代码,它在UNIX环境下的名字叫做a.out。如果是在Windows环境下,它的名字是a.exe

    如果编译器输出了错误信息,那么说明代码有错,且没有生成可执行文件。

    如果你的程序使用了C23标准,那么请用这种方式编译:

     gcc -std=c2x f.c
    

    接下来,发出如下命令来运行程序:

     ./a.out
    

    注意:命令中输入的是/,不是\

    此后,你会看到程序的运行输出结果。

  2. 指定可执行文件的名字

    如果你不想用gcc编译器的默认行为,那么可以在编译时这么做:

     gcc f.c -o f
    

    这条编译命令中-o选项的含义是:生成的可执行代码指定命名为f。注意:f文件没有后缀名。

    要运行程序,发出如下命令:

     ./f
    

二)使用C++编译器g++

这里仅以WSL为例。

在终端中发出如下命令来编译链接:

cd /mnt/d
g++ f.cpp -std=c++23

如果C++编译器版本是11+,那么请将c++23改为c++20;如果低于11,那么请改成c++17。

运行程序的步骤请参照前面的“使用C编译器gcc”。

三)添加当前目录到搜索路径

如果发出如下命令来运行程序:

a.out

系统可能会提示a.out找不到:

a.out: command not found

此时,你需要输入的是./a.out。如果你嫌这样每次都要输入./很麻烦,那么可以将当前目录加入到搜索路径中。参考如下步骤进行。

  1. 启动vim编辑器
     vim ~/.profile
    

    macOS用 .zprofile 替换 .profile。一下仅以.profile为例。

    这条命令启动了vim编辑器,打算修改~目录下的.profile。

  2. 修改.profile

    vim的编辑界面中,用上下左右键将光标移动到最后一行最后一个字符处,然后按a键,进入添加模式。此后按回车,在新的一行中输入:

     export PATH=.:$PATH
    

    然后按ESC键,再按:键,你可以看到编辑器底部会出现:。在其后面输入wq,回车。修改完成。wq的意思write & quit

    接着输入如下命令使设置生效:

     source ~/.profile
    

    关于编辑神器vim的使用,请自行查阅相关资料。


四、显式链接其他库

在默认情况下,gcc、g++在链接时,可能没有包含一些标准库,例如:数学库、多线程库等。如果需要的话(例如链接器报错),那么必须显式链接。例如:

gcc f.c –lm
g++ f.cpp -lpthread

其中,选项-lxxx就是显式链接标准库xxx。

-lxxx选项必须放在最后。

Part 2、make工具

如果你的应用由多个源代码组成,那么最好使用make工具。

一、安装make

打开一个Linux终端,在其中发出如下命令:

sudo make -v

如果系统显示版本号,则直接跳到下面的标题二。

发出如下命令来安装make

sudo apt install make -y

macOS用 brew 替换apt。以下同此。

二、make的依赖文件示例

使用make工具需要编写一个依赖文件。以下是make工具默认依赖文件Makefile的样本:

#for C program
#以下四行是变量定义
CC = gcc
cflags = -Wall -g -fsanitize=address
sources = main.c list.c
target = list

# 定义一个叫all的任务
# 这个任务下的命令必须用tab缩进,不能是空格
all:
	$(CC) $(cflags) $(sources) -o $(target)
# 上述命令解释为:启动$(CC)指定的命令,并将后面的一串参数传递给它
# 这个例子中,命令为:启动gcc编译器,将编译选项传递给它,编译、链接源文件main.c和list.c,生成一个可执行代码list。
#for C++ program
CXX = g++
cxxflags = -Wall -g -fsanitize=address -std=c++23
sources = main.cpp list.cpp
target = list

all:
	$(CXX) $(cxxflags) $(sources) -o $(target)

更多的关于make依赖文件的知识,请自行查阅相关资料。

三、使用make构建应用

假设程序源代码和Makefile都放在E:\prog目录下,那么在Linux终端中,可以发出如下命令来构建:

cd /mnt/e/prog
make

如果你不想用默认的文件名Makefile,例如把它命名为list.mk,那么可以这么构建:

make –f list.mk

Part 3、调试器

一、安装调试器

一)WSL或者虚拟机

打开终端,在其中发出如下命令,用来安装gdb

sudo apt install gdb -y

二)macOS

打开终端,在其中发出如下命令,用来安装lldb

sudo brew install lldb -y

二、使用调试器

请查阅另一篇博文:为11 为VS Code配置调试,或者自行查阅相关资料。