博主写得很好

多个文件编译在linux下编译,下面有三个文件,分别是1.cpp 和 2.cpp 和myhead.h 文件。

1.cpp

2.cpp

myhead.h

假如他们都在一个目录下面,那么编译流程:

or

当然,没有头文件,两个.c文件也是可以编译的。如下:

1.cpp文件

2.cpp文件

编译:

在稍微大一点的项目里面,一般都会包含多个文件。尤其是包含多个头文件,各自头文件的实现,和包含main函数的文件。这样的好处就是更容易开发和维护。

举一个简单的例子,main.cpp 文件是包含main函数的文件,在myinclude的文件下,包含了myhead.h 和 myhead.cpp 文件。分别是头文件的定义和实现。

文件树

main.cpp :

myhead.h

myhead.cpp

下面开始编译:

假如在当前目录直接编译的话:

直接编译的结果就是报错了,错误的原因是 默认的include目录下面没有 myhead.h 头文件。

那么通过 -I 选项 链接上去。重新编译

有报错,错误的原因是头文件虽然找到了,但是没有提示错误,没有定义sum函数。sum函数是在myhead.cpp文件上面定义的。也就是需要把myhead.cpp文件编译一下。

编译通过:

image.png

最后,再一次的编译:

image.png

运行结果:

image.png

PS:

gcc/g++ 里面的-c选项指的是,比如

将一个文件编译,但是不链接。将代码变成机器码。

比如,

将main.cpp文件编译为main.o 文件

那么链接器的作用是什么?

这样将两个.o文件和依赖库的文件链接起来,编程可执行的文件。

PPS:

以后再来写,什么是编译,什么是链接。

动态库和静态库的区别

多个文件编译的时候,可以顺便理解一下static,extern两个关键字的意思。

extern

如下所示的代码:

如果在2.cpp文件里面定义了一个变量,在1.cpp这个文件里面去访问这个变量。在链接的时候,2.cpp里面的变量对1.cpp是可以的。1.cpp里面是可以访问这个变量的,但是,需要使用extern声明这个变量是赖在其他文件的。

编译

但是,如果去掉extern的话,那么链接的时候,就会报一个错误

错误提示,连接的时候 两个文件里面的value都是彼此可以的,所以,提示变量被定义了多次。

改正这个错误,除了可以加上extern 之外,还可以加上static,改变变量的可见范围。(加上static之后,变量只能在当前文件里面可见。)

static

static 声明一个变量的时候,除了可以将变量的空间开辟在全局区。第二个就是改变变量的可见范围,这个变量只能在文件内部可以。

linux下g编译文件或目录,【转】在linux下使用gcc/g++编译多个.h文件相关推荐

  1. linux目录命令改目录名,Linux命令详解——文件和目录常用命令-linux修改文件名...

    文件和目录常用命令 查看目录内容 ls 切换目录 cd 创建和删除操作 touch rm mkdir 拷贝和移动文件 cp mv 查看文件内容 cat more grep 其他 echo 重定向 &g ...

  2. linux怎么创建牡蛎_文件amp;目录小技巧 | Linux后门系列

    0x01 Linux 目录技巧 我们都知道 Windows 下文件和文件夹命名是有很多规则和限制的,但是可以通过一些程序来绕过限制,今天我们来看看 Linux 有哪些有趣的规则 参考 https:// ...

  3. linux文件和目录基本管理系统,Linux文件基本操作管理和系统目录结构

    1.cp 复制文件或目录 cp 源文件(文件夹) 目标文件(文件夹) 例如cp linuxcast linuxcast2 cp linuxcast linuxcast.net/ 往linuxcast. ...

  4. linux文件和目录管理指令,Linux 命令(文件和目录管理 - cat)

    简述 cat 命令连接文件并打印到标准输出设备上,经常用来显示整个文件的内容.cat 只能查看文本内容的文件,如查看二进制文件,则屏幕会显示乱码.另外,cat 还可以用来创建文件.合并文件等. 命令介 ...

  5. 解决:ModuleNotFoundError: No module named 'XXX' (全)文件路径目录没错的情况下请不要重名

    转载于:https://blog.51cto.com/2338053/1982977 一.背景介绍 1. 工具目录结构 为了便于统一管理一些小工具,在本地创建了一个mytools的目录,子目录的结构如 ...

  6. linux shell判断当前目录下的文件或目录

    linux shell判断当前目录下的文件或目录 #!bin/sh for file in ./* doif test -f $filethenecho $file 是文件elseecho $file ...

  7. linux 复制指定目录下的全部文件到另一个目录中,linux cp 文件夹

    前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家.点击跳转到教程. linux复制指定目录下的全部文件到另一个目录中 复制指定目录下的全部文件到另一个目录中 文件及目录 ...

  8. windows linux复制文件夹命令,ubuntu下复制目录和文件的指令以及和windows下的copy方式...

    Ubuntu中复制文件或目录的命令 cp(copy)命令 该命令的功能是将给出的文件或目录拷贝到另一文件或目录中. 语法: cp [选项] 源文件或目录 目标文件或目录 说明:该命令把指定的源文件复制 ...

  9. Linux系统下文件与目录操作讲解

    Linux系统下文件与目录操作 在Linux系统中有一句话叫做,一切皆文件.上节我们说的I/O操作,对于普通I/O操作,都是打开.读写.关闭.这节我们通过stat结构体来了解文件的一些基本信息和本质特 ...

  10. 将linux目录中的特定文件推送到手机_linux复制指定目录下的全部文件到另一个目录中,linux cp 文件夹...

    linux复制指定目录下的全部文件到另一个目录中 复制指定目录下的全部文件到另一个目录中 文件及目录的复制是经常要用到的.linux下进行复制的命令为cp. 假设复制源目录 为 dir1 ,目标目录为 ...

最新文章

  1. django项目用 setuptools打包构建(待更新)
  2. 为什么(#39;b#39;+#39;a#39;+ +#39;a#39;+#39;a#39;)。toLowerCase()#39;banana#39;的结果?
  3. SCVMM 2012 R2运维管理十之:添加外围网络计算机
  4. 【NLP】面向对话的机器阅读理解任务(Dialogue MRC)相关论文整理
  5. 一个简单的WebService服务
  6. 如何在 ASP.NET MVC 中集成 AngularJS(2)
  7. 网站需要密码登录访问php源码
  8. python123测验答案测验3_知到app数学分析3-3测验答案查询服务
  9. Qt--音乐播放器 V2.0_vortex_新浪博客
  10. 【液晶模块系列基础视频】4.5.X-GUI图形界面库-进度条等函数简介
  11. python手机版-QPython,一个在手机上运行Python的神器
  12. [非原创] 获取CPUID;
  13. feynman1999_AI Feynman 2.0:从数据中学习回归方程
  14. 自动化检测工具助力GJB 8114-2013 C/C++语言编程安全子集标准落地应用
  15. a+b / a-b / a*b / a/b c++问题题解
  16. Vue3比Vue2有什么优势/区别
  17. 逆向破解之易语言按钮事件特征码
  18. EasyRecovery15Mac全面好用的苹果电脑数据恢复app
  19. 【Unity3D应用案例系列】答题系统开发
  20. YOLO系列 --- YOLOV7算法(二):YOLO V7算法detect.py代码解析

热门文章

  1. CMSGC造成内存碎片的解决方法
  2. Yii2 解决2006 MySQL server has gone away问题
  3. Windows下运行rabbitmqctl 相关命令(如rabbitmqctl stop)报错:Error: unable to perform an operation on node解决方案
  4. SSH登录很慢问题的解决
  5. The prefix “mvc“ for element “mvc:annotation-driven“ is not bound 异常
  6. tomcat 7/8 启动非常慢的解决方法
  7. 在MySQL中的特定列之后添加多个列
  8. 用于传递列表作为选项的argparse选项
  9. 我应该避免在Java Swing中使用set(Preferred | Maximum | Minimum)Size方法吗?
  10. JavaScript控制台中的颜色