使用gcc命令编译多个文件
使用g++命令直接一次性编译多个文件
这里以简单的HelloWorld程序为例,假设我们一共有三个文件:main.cpp,HelloWorld.cpp和HelloWorld.h. 其中HelloWorld.cpp中有一个打印HelloWorld的程序并在.h文件中声明,main.cpp通过包含.h文件调用打印HelloWorld程序。 准备文件。
我们可以直接在cmd命令行中输入如下命令进行编译(直接在文件夹的目录栏中输入cmd即可打开cmd并定位到该文件夹):
g++ main.cpp HelloWorld.cpp -o hello
这时就会在同一文件夹下生成一个hello.exe文件。
使用g++命令分别编译和链接
在cmd命令中依次输入如下命令:
g++ -c main.c
g++ -c HelloWorld.c
g++ main.o HelloWorld.o -o hello
可以看到在文件夹中除了生成一个hello.exe文件之外,还有前两个步骤生成的中间文件——main.o和HelloWorld.o. 如果不想要中间文件接下来还可以使用 ``del main.o HelloWorld.o`` 将中间文件删除(del是windows下的命令)。
使用makefile文件
对于一个大型的项目,里面可能有很多个文件。这时候如果每次编译都使用上面的方法显然是不切实际的。 这时候我们可以借助makefile文件,只需要写一次就可以进行多次编译,如果文件有增删直接修改makefile文件即可。 首先新建一个makefile文件(注意没有后缀名),然后用notpad++等文本编辑器在其中加入以下代码:
# 文件名: makefile
SHELL=cmd.exe
OBJS=main.o HelloWorld.o
main: $(OBJS)
g++ -o hello $(OBJS)
main.o:main.cpp HelloWorld.h
g++ -c main.cpp
HelloWorld.o: HelloWorld.cpp HelloWorld.h
g++ -c HelloWorld.cpp
clean:
del $(OBJS)
需要注意的是在windows下需要将SHELL切换到windows下的cmd,不然不能运行del命令。 我的电脑上安装的是MinGW,由于我需要使用MinGW/bin下的mingw32-make命令,所以需要将bin文件夹添加到环境变量里。 然后在cmd命令行中输入如下命令:
mingw32-make
这时候就会在文件夹中生成hello.exe文件和相关的中间文件。如果需要删除中间文件再执行如下命令即可:
mingw32-make clean
如果我们需要自动编译多个文件同时编译过后自动删除中间文件,最后给出编译完成的提示信息,我们也可以使用windows下的bat脚本。 编写bat脚本如下:
:: 文件名: make.bat
echo off
mingw32-make
echo HelloWorld编译完毕
mingw32-make clean
echo 删除中间文件完毕 ::执行编译后的文件
hello.exe
echo 文件执行完毕
之后我们直接在cmd命令行中输入 make ,批处理文件就会自动帮我们执行相关命令并给出提示:

这样我们在编写完文件以后,只需要一个 cmd 和一个 make 就可以让编译、删除中间文件、执行输出文件自动执行了。
使用gcc命令编译多个文件的更多相关文章
- Keil5.15使用GCC编译器链接.a库文件
我们知道,当使用第三方的代码时,人家有可能会扔个Lib文件给你.这时候,别人仅仅要提供header文件给你,则你就能够通过Lib文件及header的函数声明,对Lib中的函数进行调用.在Keil中假设 ...
- gcc编译时头文件和库文件搜索路径
特殊情况:用户自定义的头文件使用#include"mylib"时,gcc编译器会从当前目录查找头文件 一.头文件 gcc 在编译时寻找所需要的头文件 : ※搜寻会从-I开始( ...
- [vim配置]windows下在vim中使用gcc/g++编译调试c/cpp文件
在Linux里面混了一个多月,vim编程用得甚爽.无奈前天将Linux里面的编程文件夹误删,而技术不精无法找回,悲痛欲绝.再者,无限怀念windows里面的游戏,并觉得现在在Linux里面也学不到什么 ...
- gcc命令以及makefile文件
(一)makefile里涉及到的gcc命令 gcc -I./inc:指定头文件寻找目录 将按照 ./inc --> /usr/include --> /usr/local/include的 ...
- Linux下gcc编译生成动态链接库*.so文件并调用它(注:执行Test程序后无需用export 命令指定.so库文件路径:方法在文中下方;)
动态库*.so在linux下用c和c++编程时经常会碰到,最近在网站找了几篇文章介绍动态库的编译和链接,总算搞懂了这个之前一直不太了解得东东,这里做个笔记,也为其它正为动态库链接库而苦恼的兄弟们提供一 ...
- 在windows下使用cmd命令行对java文件进行编译和执行
windows下利用cmd命令行可以调用jdk里的javac.exe和java.exe对java文件进行编译和执行,前提是jdk已成功安装并正确配置相关环境变量 相关配置链接:java基础学习总结—— ...
- 使用ar命令删除iOS静态库重复编译的.o文件
关于 xcode引入第三方静态类库 duplicate symbol _OBJC_XXX 重复编译错误 看这里 http://www.cnblogs.com/cocoajin/p/3917709.ht ...
- 使用javac命令编译java文件。
今天想学习一下web services的知识,在网上找了一个教程,里面写了一个web services客户端调用,在cmd下执行的,但是没有给出用javac编译的细节.所以自己就借着这个机会学了一下: ...
- linux gcc 编译时头文件和库文件搜索路径
一.头文件 gcc 在编译时寻找所需要的头文件 : ※搜寻会从-I开始 ※然后找gcc的环境变量 C_INCLUDE_PATH,CPLUS_INCLUDE_PATH,OBJC_INC ...
随机推荐
- mysql中的int和tinyint、varchar和char、DateTime和TimeStamp区别
一.int和tinyint的区别 大小: tinyint在mysql中占用1个字节 即: 1 bytes = 8 bit ,一个字节最多可以代表的数据长度是2的8次方:11111111 = 256 在 ...
- Ubuntu忘记超级用户root密码,重新设置密码
Ubuntu版本:Ubuntu 16.04.3 LTS 1启动系统,在启动过程中,反复按Esc键或者shift键(本人亲测反复按或者长按都可以,没必要纠结),直到出现以下界面: 通过上下键移动,选择U ...
- one-hot编码理解
one-hot是比较常用的文本特征特征提取的方法. one-hot编码,又称“独热编码”.其实就是用N位状态寄存器编码N个状态,每个状态都有独立的寄存器位,且这些寄存器位中只有一位有效,说白了就是只能 ...
- python汉诺塔问题的递归理解
一.问题背景 汉诺塔问题是源于印度一个古老传说. 源于印度一个古老传说的益智玩具.大梵天创造世界的时候做了三根金刚石柱子,在一根柱子上从下往上按照大小顺序摞着64片黄金圆盘.大梵天命令婆罗门把圆盘从下 ...
- python-day18 JS正则,组件BootStrap、EasyUI、JQueryUI1,插件轮播,django
@第一节课程内容 js正则 登录注册验证 @text-判断字符串是否符合规定的正则 @exec-获取匹配的数据 bootstrap(组件) –css –js 学习bootstrap规则 jQueryu ...
- Java 非递归实现 二叉树的前中后遍历以及层级遍历
class MyBinaryTree<T> { BinaryNode<T> root; public MyBinaryTree() { root = new BinaryNod ...
- Winform 中写代码布局中遇到的控件遮盖问题
在winform中编程时,需要动态向主窗体中增加菜单栏和用户控件,菜单栏需要设置DockStyle为Top ,而设置用户控件的DockStyle为Fill,之后在加载的时候,出现了菜单栏遮盖用户控件的 ...
- SVN命令行操作
参考 https://wenku.baidu.com/view/511a7d29ed630b1c59eeb5f3.html 1, 将文件checkout到本地目录 svn check out http ...
- Java框架spring 学习笔记(六):属性注入
属性注入:创建对象的时候,向类里面的属性设置值. Java属性注入有三种方法: 使用set方法注入 有参数构造注入 使用接口注入 Spring框架里面的属性注入方式 有参数构造属性注入 set方法属性 ...
- 2019 年 React 学习路线图(转)
转自:https://www.infoq.cn/article/AEkiVAiJf25LZmoUe_yc 之前我们已经介绍了2019 年 Vue 学习路线图,而 React 作为当前应用最广泛的前端框 ...