如果您在Linux下编写C或C++,则必须使用GNUGCC编译C或C++源代码以生成可执行程序。像往常一样,您可以使用标志来扩展功能。那么让我们看看一些最重要的GCC标志。重要的GCC标志为了便于理解,我将使用以下C程序:#includeintmain(void){printf("\nlinuxmi.com\n");return0;}简单吧??不要以此谈论我的编程技能。1.使用-o指定输出文件名在最基本的术语中,您将使用GCC编译器,如下所示:linuxmi@linuxmi/home/linuxmi/www.linuxmi.com?gccmain.c上面的命令将编译程序并创建一个名为a.out.的可执行文件:linuxmi@linuxmi/home/linuxmi/www.linuxmi.com?tree.├──a.out└──main.c0目录,2个文件指定输出即可执行一个文件名,您需要做的就是将-o标志附加到文件名,如下所示:gccmain.c-oFilename例如,这里我将可执行文件命名为linuxmi:linuxmi@linuxmi/home/linuxmi/www.linuxmi.com?gccmain.c-olinuxmilinuxmi@linuxmi/home/linuxmi/www.linuxmi.com?tree.├──a.out├──linuxmi└──main.c0目录,3个文件2。使用-Wall来启用每个警告如果您想打印每个警告以便您可以检查您的代码并使它比以往更好,请使用-Wall标志。linuxmi@linuxmi/home/linuxmi/www.linuxmi.com?gcc-Wallmain.c-olinuxmi例如,这里我将使用不初始化变量的代码:#includeintmain(void){诠释我;printf("\nlinuxmi.com[%d]\n",i);return0;}当我执行代码时,它给我一个警告'i'isuseduninitialized:如图3所示。使用-l链接共享库要将C程序与共享库链接起来,您只需将-l标志附加到共享库的名称。例如,这里我将代码main.c与共享库pthread链接以生成最终的可执行文件linuxmi:linuxmi@linuxmi/home/linuxmi/www.linuxmi.com?gccmain.c-oHello-lpthread但是如果你想链接外部库?在这种情况下,您必须使用-L。例如,我在这里链接存储在/home/linuxmi/LHB中的共享库“LHB”:linuxmi@linuxmi/home/linuxmi/www.linuxmi.com?gcc-L/home/linuxmi/LHB-omain.clinuxmi-lLHB4。仅使用-E获取预处理器输出预处理是编译的第一阶段,如果您只关心第一阶段的代码会发生什么,则可以使用-E标志。这里我将stdout重定向到first-stage.i文件:linuxmi@linuxmi/home/linuxmi/www.linuxmi.com?gcc-Emain.c>first-stage.i5。使用-S获取汇编代码如果您关心编译期间的汇编输出,您可以使用-S标志轻松生成它。这里我生成了main.c汇编输出main.s命名为:linuxmi@linuxmi/home/linuxmi/www.linuxmi.com?gcc-Cmain.c-ocompiled6。仅使用-C生成编译代码要在没有任何链接的情况下获得编译代码,您所要做的就是使用-C标志。例如,我在名为compiled的文件中生成了main.c生成的编译代码:linuxmi@linuxmi/home/linuxmi/www.linuxmi.com?gcc-Cmain.c-ocompiled7。使用-save-temps生成所有的中间文件,我解释了如何获取预处理、汇编和编译的输出,但是如果我告诉你可以一次获取所有这些呢?它非常简单,可以使用-save-temps标志轻松生成。假设我想为main.c文件生成所有中间文件,所以我需要遵循给定的命令:linuxmi@linuxmi/home/linuxmi/www.linuxmi.com?gcc-save-tempsmain.c8。使用-Werror会将警告转化为Bugs在测试时,我们程序员往往会忽略可能表明应用程序存在漏洞和安全威胁的警告。为了使您的代码坚如磐石,我建议您使用-Werror标志将警告转换为错误。在这里,我使用的代码会给你一个警告,说“未定义的变量c”:#includeintmain(void){charc;//打印字符串printf("\nLinuxMi.com[%d]\n",c);return0;}但当我在执行时使用-Werror标志时:9.对位置无关的代码使用-fPIC对于那些处理动态链接的人来说,这个标志可能是至关重要的,尤其是对于共享库。创建共享库时,你应该有位置独立的代码,这样你就可以从任何地址而不是静态地址加载共享库。例如,我在这里从main.c创建了一个名为libmain.so的共享库:linuxmi@linuxmi/home/linuxmi/www.linuxmi.com?gcc-c-Wall-Werror-fPICmain.clinuxmi@linuxmi/home/linuxmi/www.linuxmi.com?gcc-shared-olibmain.somain.o10。使用-V获得详细的编译输出如果你想逐行查看GCC对你的代码做了什么,你可以使用-V标志来获得详细的输出。linuxmi@linuxmi/home/linuxmi/www.linuxmi.com?gcc-Wall-vmain.c-olinuxmi奖励努力学习的朋友:使用文件选项文件应用GCC标志可以节省您很多时间。首先,让我们使用touch命令创建一个文件:linuxmi@linuxmi/home/linuxmi/www.linuxmi.com?touchFlags您现在可以使用您喜欢的任何文本编辑器输入标志。只要确保用空格将它们分开即可。我在一个文件中保存了3个标志:当你完成添加标志时,你所要做的就是将@符号附加到文本文件:如你所见,它将警告变成错误并创建所有中间文件。