当前位置:首页 » 编程软件 » 编译器同时编译多个文件

编译器同时编译多个文件

发布时间: 2022-05-30 20:12:42

A. c多个文件如何编译

关于整个 C 语言中的主函数 main( ) 如何调用相关的头文件(*.h)、以及调用其它独立的模块(*.c)的方法,关键在于对于如何编写 makefile 文件的真正理解、以及真正掌握编写规则。
由于我已经有很多年没有编写过 C 语言源程序、以及编写 makefile 文件了,但是可以大概给你提供一个思路就是:

下面的文本文件假设以 my_makefile 为例,编译环境为 Linux 系统,C 语言编译器为 gcc。
但是在这里注意一点:我的 my_makefile 文件中的注释语句是否是分号进行注释,我已经不太记得了,这个需要自己再参考一下。

另外就是:对源文件(*.c)、以及生成可执行文件(my_runfile)在 my_makefile 文件中的前后次序,我也记不清了,仅供参考。
myprog1.o: myprog1.c ; myprog1.o 的生成依赖于 myprog1.c 这个源程序
gcc -c myprog1.c ; 使用 Linux 系统的 C 语言编译器对 myprog1.c 只编译、不链接
myprog2.o: myprog2.c ; myprog2.o 的生成依赖于 myprog2.c 这个源程序
gcc -c myprog2.c ;使用 Linux 系统的 C 语言编译器对 myprog2.c 只编译、不链接
my_runfile: myprog1.o myprog2.o ; 可执行文件 my_runfile 的生成依赖于 myprog1.o、myprog2.o 这两个目标文件
gcc -o my_runfile myprog1.o myprog2.o ; 使用 cc 的 -o 选项生成用户自定义的可执行文件:my_runfile,如果不指定 -o 选项,cc 编译器生成的缺省可执行文件名为:a.out
运行命令为:
$make -f my_makefile (使用 -f 选项代替缺省的 make 文件名 makefile)

B. 怎么编译多个c语言文件

1、如果,在一个c主程序中,以include形式包含了其他所有的引用文件,在编译过程中,编译器首先会将这些文件合并到一个临时文件中,然后再对这个临时文件进行编译。
2、如果,是作为一个工程,编译器会分别编译各个独立的文件(如果文件中有include按照上一步进行),然后再将编译好的初步结果用链接程序连到一起。
简单的说,每一个.c或者.cc都是一个编译单元,每一个编译单元编辑的结果是一个.o或者obj之类的中间文件,至于是否是多文件,不需要关心,但是要保证不同的编译单元之间不要有重复的符号,这就是要避免重复包含。
每一个编译单元生成的目标文件.o或者obj都会引用一些不在本目标文件中的符号,这些符号定义在别的.o或者.obj文件中, 链接器把他们联系在一起,所有的符号也就都有定义了,编译链接简单说来就是这样。

C. 多个文件的条件编译,需要注意些什么

不能在同一个文件中包含头文件两次。一般不会犯这种错误,但是当使用包含了一个头文件的文件时有可能在不知情的情况下犯这个错误。

使用预处理器指令#ifndef来解决上面的问题。语名#ifndef hyong…..#endi表示仅当以前没有使用预处理器编译指令#define定义的名称hyong时才处理#ifndef….#endif之间的语句。#define通常创建符号常量,比如#define H 3;把常量3定义为名字H,但只使用#define就能创建名称,比如#define H;就创建了一个名称H。完整的#ifndef….#endif语句的例子如下:#ifndef HY #define HY void g(); #endif;该语句的执行顺序为:编译器首先遇到该头文件时,名称HY没有被定义,这时编译器就将查看#ifndef….#endif之间的内容,并读取到#define HY这一行。如果在同一文件中遇到包含该头文件的代码时,编译器就知道HY这个名字已经被#define定义了,从而跳过#ifndef….#endif之间的内容。注意这种方法并不能防止头文件被包含两次,而只是让他忽略除第一次包含之外的所有内容。

上面的内容节选自本人文库里的文章《C++名称空间与作用域专题》,希望对你有帮助,如果你对预处理器不了解,可以再去下载本人的另一篇文章《C++宏,预处理器,RTTI,typeid与强制类型转换专题》

D. 关于gcc编译器,在控制台写*.cpp编译多个cpp会报错

根据报错信息,是因为“g++ -c *.cpp”这条指令的通配符串“*.cpp”没有展开所致。

根据验证,当执行“g++ -c *.cpp”这条指令时,当前目录比如testcomb下没有后缀名为cpp的文件,“*.cpp”就不会展开,就会报错。

---

如上图所示,当前目录下没有.c文件,报错与问题中的一致。

E. vscode C语言如何编译多个源文件

你可以写一个类似的任务在task里:在args一行,写你需要编译的文件
{
"label": "build my project",
"type": "shell",
"command": "C:\\MinGW\\bin\\g++.exe",
"args": ["main.cpp", "test.cpp", "-o", "test.exe"],
"group": "build",
},
你还可以写一个make任务,对于文件多的,手写不现实,可以做一个makefile
这样你只要在launch里面
preLaunchTask,写上这个build my project,就可以了。

F. c语言编写和编译多文件的程序

第一个问题
请问,我是不是该这样做:
在main.c中#include
在fun.c中同样#include
(好像是必需的,请详细解释)
这是必需的。因为编译器只是把包含文件的代码复制过来,既然你二个文件中都用到头文件的内容,那当然要包含头文件,否则就会出错。
我的观点,如果这两步都是必需的
那么当有很多个比如10个.c程序每个里头都要#include
那么文件是不是会特别大,当有100个.c程序都要包含一下的话,那么不是非常重复么?)
那当然是会重复的。不过这个对程序的运行效率没任何影响,只是在编译过程中对文件的分析时间会稍长些,这也是没有办法的事,全看代码编写者如何组织结构了。
第二个问题:
会的。解决的方法就是在可能被多次包含的头文件中开头加上#pragma
once,那样就可以保证此头文件代码只被执行一次,而不会造成头文件中函数多次重复定义至于引起这种情况的情况。当然你也可以自己用#ifdef等预编译处理来解决。你问的问题不就是这种情况么?main.c和fun.c中都包含头文件tou.h
第三个问题:
当我在main.c中这样
#define
unchar
unsigned
char
那么当我在fun.c中还需要重新创建替换宏unchar吗
可以不在创建而直接使用吗?
答案是需重新创建,不能直接使用。但你可以把一些在多个文件中使用的宏、全局变量等统一定义到一个头文件中,那这样就可以避免多次定义了。

G. C 语言中多文件编译的问题

如果有多个源文件,基本上有两种编译方法:
[假设有两个源文件为test.c和testfun.c]
1.
多个文件一起编译
用法:#gcc
testfun.c
test.c
-o
test
作用:将testfun.c和test.c分别编译后链接成test可执行文件。
2.
分别编译各个源文件,之后对编译后输出的目标文件链接。
用法:
#gcc
-c
testfun.c
//将testfun.c编译成testfun.o
#gcc
-c
test.c
//将test.c编译成test.o
#gcc
-o
testfun.o
test.o
-o
test
//将testfun.o和test.o链接成test
以上两种方法相比较,第一中方法编译时需要所有文件重新编译,而第二种方法可以只重新编译修改的文件,未修改的文件不用重新编译。

H. C语言多个源文件一起编译

你这个是一个工程里的两个.c文件,如果这两个.c文件都有入口那么肯定是不正确的,编译器会不知道哪个才是你程序的真正入口,如果你去掉一个入口,利用头文件包含来调用函数,两个.c也是一样可以的

I. c语言中多个文件的编译问题

第一个问题
请问,我是不是该这样做:
在main.c中#include
在fun.c中同样#include
(好像是必需的,请详细解释)
这是必需的。因为编译器只是把包含文件的代码复制过来,既然你二个文件中都用到头文件的内容,那当然要包含头文件,否则就会出错。
我的观点,如果这两步都是必需的
那么当有很多个比如10个.c程序每个里头都要#include
那么文件是不是会特别大,当有100个.c程序都要包含一下的话,那么不是非常重复么?)
那当然是会重复的。不过这个对程序的运行效率没任何影响,只是在编译过程中对文件的分析时间会稍长些,这也是没有办法的事,全看代码编写者如何组织结构了。
第二个问题:
会的。解决的方法就是在可能被多次包含的头文件中开头加上#pragma
once,那样就可以保证此头文件代码只被执行一次,而不会造成头文件中函数多次重复定义至于引起这种情况的情况。当然你也可以自己用#ifdef等预编译处理来解决。你问的问题不就是这种情况么?main.c和fun.c中都包含头文件tou.h
第三个问题:
当我在main.c中这样
#define
unchar
unsigned
char
那么当我在fun.c中还需要重新创建替换宏unchar吗
可以不在创建而直接使用吗?
答案是需重新创建,不能直接使用。但你可以把一些在多个文件中使用的宏、全局变量等统一定义到一个头文件中,那这样就可以避免多次定义了。

J. 关于java中一次编译多个源文件时的编译顺序的问题

在java编译过程中,确实是会自动寻找的.当它先编译Test的时候,发现需要先编译TestPackage类,才能完成编译Test的工作,然后编译器开始编译TestPackage.
如果,你的这两个java文件都没有打包,并且在同一个目录下的话,你可以通过直接输入javac Test.java看到,尽管你没有发出命令要求编译TestPackage类,但是由于编译器检测到需要有TestPackage类的支持,才能编译Test,所以这时TestPackage也被编译了.
现在程序打包了,你先编译Test的这种情况下,编译器先找的是包,而你的包org.it315.example是不存在的,所以会出错

热点内容
java返回this 发布:2025-10-20 08:28:16 浏览:645
制作脚本网站 发布:2025-10-20 08:17:34 浏览:936
python中的init方法 发布:2025-10-20 08:17:33 浏览:632
图案密码什么意思 发布:2025-10-20 08:16:56 浏览:821
怎么清理微信视频缓存 发布:2025-10-20 08:12:37 浏览:731
c语言编译器怎么看执行过程 发布:2025-10-20 08:00:32 浏览:1066
邮箱如何填写发信服务器 发布:2025-10-20 07:45:27 浏览:299
shell脚本入门案例 发布:2025-10-20 07:44:45 浏览:160
怎么上传照片浏览上传 发布:2025-10-20 07:44:03 浏览:852
python股票数据获取 发布:2025-10-20 07:39:44 浏览:763