05 编译环境和工具
Part 1、编译器
一、 安装gcc/g++编译器
一)WSL或者虚拟机中的Linux
这里以在Ubuntu中安装gcc/g++版本14为例。这个版本支持最新(但不是全部)的C23/C++23标准。
注意:这要求Ubuntu版本是24.04及以上。如果版本较低,那么请先升级Ubuntu内核至少到24.04。如果暂时不能,那么可以暂时使用gcc/g++版本13。
- 
    
卸载旧版本
在终端中发出如下命令之一:
gcc -v g++ -v如果系统显示命令找不到,那么请直接跳到步骤2。
如果显示的主版本号低于13(例如是12),那么先卸载它:
sudo apt remove gcc-12 g++-12 -y - 
    
安装最新版
在终端中发出如下命令:
sudo apt install gcc-14 g++-14 -y - 
    
清除原有默认设置
如果你是第一次安装
gcc/g++,请跳过这一步。在终端中发出如下命令:
sudo update-alternatives --remove-all gcc sudo update-alternatives --remove-all g++请忽略可能出现的提示信息。
 - 将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++ 
 - 方法1:在终端中发出如下命令:
        
 - 验证是否设置成功
 在终端中发出如下命令:
    
gcc -v g++ -v如果看到显示的最后一行中,主版本号为14,那么设置就成功了。
 
二)macOS
一般情况下,macOS自带了clang编译器,并且默认gcc是clang的一个符号链接。
- 
    
验证
gcc是否存在在终端中发出如下命令:
clang -v gcc -v clang++ -v g++ -v如果上述四条命令都正确显示了版本号,那么就直接跳到大标题二。
 - 
    
如果
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
- 
    
常规使用
打开终端,在其中发出如下命令来编译链接:
- 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注意:命令中输入的是
/,不是\。此后,你会看到程序的运行输出结果。
 - WSL
        
 - 
    
指定可执行文件的名字
如果你不想用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。如果你嫌这样每次都要输入./很麻烦,那么可以将当前目录加入到搜索路径中。参考如下步骤进行。
- 启动vim编辑器
    
vim ~/.profilemacOS用 .zprofile 替换 .profile。一下仅以.profile为例。
这条命令启动了vim编辑器,打算修改~目录下的.profile。
 - 
    
修改.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配置调试,或者自行查阅相关资料。