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

c语言中多个文件的编译问题,第1张

第一个问题

请问,我是不是该这样做:

在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吗

可以不在创建而直接使用吗?

答案是需重新创建,不能直接使用。但你可以把一些在多个文件中使用的宏、全局变量等统一定义到一个头文件中,那这样就可以避免多次定义了。

在该路径下会生成一个文件夹(CMakeFiles),三个文件(Makefile, CMakeCache.txt, cmake_install.cmake)以及一个程序(addition)

此时的文件目录结构为

该项目该依赖于MPI,GDAL和cereal库。MPI和GDAL库自行编译

1.配置各种编译的时候,可以使用set设置,更多详情,请自行搜索。

2.头文件的包含请使用include_directories。

3.搜索源文件请使用aux_source_directory。

4.第三脊滚基方库的查找使用 find_package。例如我们想找GDAL, 那么 find_package(GDAL), 它会在 /usr/share/cmake/Modules 文件中的FindGDAL.cmake文件中去找GDAL的各种信息。前提是GDAL 是make install的, FindGDAL.cmake中才会有GDAL的各种信息。否则的话,我们需要set自行制定GDAL的相关信息。

5.第三方库的链接用target_link_libraries。

注意,也樱谨可以将该项目中的某个文件夹编译成静态库,然备隐后在于其余源文件链接,可以参考: https://blog.csdn.net/cliukai/article/details/90670243

简单的多文件编译: https://blog.csdn.net/cliukai/article/details/90670243

有第三方库的文件编译: https://blog.csdn.net/fb_help/article/details/79593037

关于整个 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)


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/tougao/12199595.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-21
下一篇 2023-05-21

发表评论

登录后才能评论

评论列表(0条)

保存