cc 命令详解

| 选择喜欢的代码风格  

A B C D E F G H I J K L M N O P Q R S T U V W X Y Z

cc 命令安装:


-bash/zsh: cc: command not found

#Debian
apt-get install gcc

#Ubuntu
apt-get install gcc

#Alpine
apk add gcc

#Arch Linux
pacman -S gcc

#Kali Linux
apt-get install gcc

#CentOS
yum install gcc

#Fedora
dnf install gcc

#Raspbian
apt-get install gcc

#Docker
docker run cmd.cat/cc cc

cc 命令补充说明:


通常,编译器会对您的代码执行以下功能:

  • 预处理:C 预处理器(“cpp”)通过删除注释,扩展宏以及执行一些其他重要步骤来准备将代码发送到实际编译器。
  • 语法检查:您的程序是否包含任何语法错误?如果是这样,编译器会通知您,您必须在继续操作之前修复它们。如果它怀疑你的程序的某些部分不正确,但它不确定它们实际上是错误,它可能会发出警告,但仍然编译该程序。
  • 转换为汇编语言:这是一个中间步骤,您的代码将被转换为目标系统汇编语言的语言。这几乎是您的代码仍然可供人阅读的最后一步。
  • Assembly:您的程序被组装成适合您的目标平台的目标代码的位和字节。
  • 链接:目标代码与程序和命令行选项指定的任何库函数的目标代码链接在一起,并创建可执行文件。

cc 命令语法:


cc [ options ]

cc 命令选项:


您可以将数百个选项传递给编译器,以微调程序的执行方式。 在这里,我们选择了一些最有用和最常用的选项,您可能需要这些选项来创建可执行文件。

-c 只需编译代码; 不要尝试链接源文件。 将创建对象文件,可以选择稍后在单独的步骤中链接以创建可执行文件。

-O[level] 创建优化的可执行文件 编译器将分析您的代码,如果它知道任何加速性能的聪明技巧,它将在字节代码中实现它们。 级别是可选的数字,字母或单词,可指定应进行多少优化。 
          例如,GNU编译器集合允许选项-O0指定最小优化(默认),-O1和-O2用于中间优化级别,-O3用于最大化优化。 -Ofast可用作-O3的别名,-Og将执行与调试器稍后分析兼容的优化。
          优化需要更多的计算和内存,并且需要更长的时间才能完成。 
          x86系统的常见优化技巧包括减少指令大小以降低执行成本,为零值实现专用寄存器(因为在大多数程序中通常使用零),并通过利用优化某些乘法和数组索引缩放操作 LEA(“加载有效地址”)指令。

-Wall 编译时启用“all”(除了最深奥的所有)警告。 这是定期使用的一个很好的选择,因为它可以提示您任何可能不是错误的条件,但您可能仍然希望在编译之前解决。

-ansi 禁用cc提供的大多数(但不是全部)非ANSI C兼容功能。 要遵守严格的ANSI标准,请启用此选项。 这样做可确保您的代码完全可移植,以便在任何其他系统上进行编译。

-g 创建已编译的可执行文件的调试版本。 编译器将在编译的可执行文件中包含关于哪个源文件对应于哪个函数调用的信息。 调试器稍后可以使用此信息在您单步执行程序时显示源代码。 请注意,这会创建一个更大的可执行文件。

-D name[=value] 通过将指定值分配给符号名称,在编译时定义宏。 运行C预处理器时,它会将 name 的任何实例扩展为 value 文本。

-Idir 在搜索常用目录之前,搜索名称不以斜杠(/)开头的包含文件。 将按指定的顺序搜索多个-I选项的目录。 预处理器首先在包含 sourcefile 的目录中搜索 #include 文件,然后在使用 -I options(如果有)命名的目录中搜索 /usr/ucbinclude,最后在 /usr/include 中搜索 .include 文件。

-Ldir 将dir添加到编译器将查找链接库的目录列表中。 此选项传递给 ld 和 /usr/lib。

-llibrary 如果链接,此选项会将指示的库添加到要链接的库列表中。 例如,如果您正在使用C数学库(libm)中的函数,则可以使用选项-lm在编译时链接它。
          请注意库的相互依赖关系,并确保在命令行上以正确的顺序链接它们; 首先指定其他库将依赖的任何库。 例如,“-lGL -lGLU”将首先搜索libGL,然后搜索libGLU。
          libGLU依赖于libGL,因此如果颠倒了这些-l选项的顺序,程序将无法编译。

-M 如果链接,则创建一个与输出可执行文件具有相同基本名称的映射文件,但带有后缀.map。 此映射文件包含带有其地址的符号列表。

-mmodel 指定编译器和链接器使用的内存模型。 模型的值包括“小”存储器模型的s,m代表“中”,l代表“大”,f代表“平坦”(32位),c代表“紧凑”,或h代表“巨大”。 除非您确定需要此选项,否则可以省略它。

-o file name 已编译的可执行文件的输出名称。 如果未指定文件名,则编译的可执行文件将命名为a.out。

-S 生成汇编程序源代码,但在实际汇编之前停止。

-Uname “Undefine”任何以前定义的宏命名名称,可以在源代码中使用-D在命令行中指定。

cc 命令实例


#编译文件 myfile.c。 输出将写入可执行文件 a.out。
cc myfile.c

# cc 编译文件 myfile.c 
# 并命名编译的可执行输出文件 myexe。
cc myfile.c -o myexe

# cc 编译文件 myfile.c 并将编译后的
# 可执行文件输出为 myexe,如果出现则在编译期间显示警告。
cc myfile.c -Wall -o myexe

# cc 将 myfile.c 编译为可执行的 myexe,
# 链接 libX11 库并在编译期间发出任何适用的警告。
cc myfile.c -Wall -lX11 -o myexe

# cc 将 myfile.c 编译为可执行的 myexe,
# 链接 libX11 库,严格遵守ANSI C标准,并在适用时发出警告。
cc myfile.c -Wall -ansi -lX11 -o myexe

cc 命令扩展阅读:




cc 命令评论