谁能告诉我预编译gcc -E .c文件,会有如下的信息,前面4行代表啥意思?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了谁能告诉我预编译gcc -E .c文件,会有如下的信息,前面4行代表啥意思?相关的知识,希望对你有一定的参考价值。

# 1 "hello.c" ===>?
# 1 "<built-in>" ===>?
# 1 "<command-line>" ===>?
# 1 "hello.c" ===>?
# 1 "/usr/include/stdio.h" 1 3 4
# 28 "/usr/include/stdio.h" 3 4
# 1 "/usr/include/features.h" 1 3 4
# 323 "/usr/include/features.h" 3 4
# 1 "/usr/include/x86_64-linux-gnu/bits/predefs.h" 1 3 4
# 324 "/usr/include/features.h" 2 3 4
# 356 "/usr/include/features.h" 3 4
# 1 "/usr/include/x86_64-linux-gnu/sys/cdefs.h" 1 3 4
# 353 "/usr/include/x86_64-linux-gnu/sys/cdefs.h" 3 4
# 1 "/usr/include/x86_64-linux-gnu/bits/wordsize.h" 1 3 4
# 354 "/usr/include/x86_64-linux-gnu/sys/cdefs.h" 2 3 4
# 357 "/usr/include/features.h" 2 3 4
# 388 "/usr/include/features.h" 3 4
# 1 "/usr/include/x86_64-linux-gnu/gnu/stubs.h" 1 3 4
最上面的4行都什么意思?
# 1 "hello.c" ===>?
# 1 "<built-in>" ===>?
# 1 "<command-line>" ===>?
# 1 "hello.c" ===>?

参考技术A -E 仅运行 C 预处理器

使用 MinGW32 GCC 编译。只告诉链接库一次?

【中文标题】使用 MinGW32 GCC 编译。只告诉链接库一次?【英文标题】:Compiling with MinGW32 GCC. Only tell link libraries once? 【发布时间】:2012-07-25 09:00:48 【问题描述】:

我正在使用 mingw32 gcc 通过命令行编译程序。随着源文件的增加,我遇到了一些问题。首先,考虑以下脚本:

gcc -Wall -I"MyDir" -I"MyDir2" -L"MyLibDir" -L"MyLibDir2" -l lib1 -l lib2 -l lib3 -c file.c
gcc -Wall -I"MyDir" -I"MyDir2" -L"MyLibDir" -L"MyLibDir2" -l lib1 -l lib2 -l lib3 -c file2.c
gcc -Wall -I"MyDir" -I"MyDir2" -L"MyLibDir" -L"MyLibDir2" -l lib1 -l lib2 -l lib3 -c file3.c
gcc -o myprog.exe file1.o file2.o file3.o

现在,我不能只告诉gcc 编译器目录-I、链接器目录-L 和链接库-l 一次,然后用相同的选项编译第二个和第三个源文件,而不必重新输入?类似的东西

gcc -define-options -Wall -I"MyDir" -I"MyDir2" -L"MyLibDir" -L"MyLibDir2" -l lib1 -l lib2 -l lib3 
gcc -Wall -c file1.c
gcc -Wall -c file2.c
gcc -Wall -c file3.c
gcc -o myprog.exe file1.o file2.o file3.o

【问题讨论】:

【参考方案1】:

据我所知,不,你不能。但这就是发明 make 和 Makefile 的原因 :) 我认为 this tutorial 足以让您开始为您的小型项目编写一个体面的 Makefile。

PS:快速而肮脏的方法是编写一个简单的 bash 脚本,将包含目录保存在一个变量中,但在我看来 Makefile 是一个更好的选择,因为您不想重新发明***。

PS2:出于好奇,我发现确实有办法做到这一点。您只需要定义一些环境变量。详情见这里:How to add a default include path for gcc in linux?

【讨论】:

链接教程的要点:调用目标all 没有什么特别的。 make 认为在 .DEFAULT_GOAL 为空时读取的第一个目标是默认值,除非对特殊变量 .DEFAULT_GOAL 的赋值改变了这一点。见gnu.org/software/make/manual/html_node/Special-Variables.html。

以上是关于谁能告诉我预编译gcc -E .c文件,会有如下的信息,前面4行代表啥意思?的主要内容,如果未能解决你的问题,请参考以下文章

linux中如何用gcc编译用vi写的c文件

使用 MinGW32 GCC 编译。只告诉链接库一次?

如何在 Windows 上使用 GCC 编译 Scintilla?

Linux下如何编译,运行C程序?需要安装编译器吗

“linux”怎么编译c的源程序的?“gcc”编译命令是啥?

gcc编译过程简述