使用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
就可以让编译、删除中间文件、执行输出文件自动执行了。
最新文章
- WPF整理-跨程序集访问资源
- Emgu.CV/opencv 绘图 线面文字包括中文
- PAT 1015. 德才论 (25)
- DRAM 内存介绍(二)
- matlab演奏最炫民族风的代码注释
- 【LeetCode】5. Longest Palindromic Substring 最大回文子串
- Android实例-手机震动(XE8+小米2)
- jquery升级到新版本报错[jQuery] Cannot read property ‘msie’ of undefined错误的解决方法(转)
- Mac中QT程序发布
- 原生JavaScript如何解决父元素查找指定类名的子元素的问题
- [HNOI 2004]宠物收养场
- ajax请求code:200但是进入error函数
- ping不通公网ip时路由器设置
- SQL-存储过程-010
- sealed关键字
- 几个文本处理工具的简单使用(wc,cut,sort,uniq,diff和patch)
- remote staging type or host is not specified
- spring boot thymeleaf
- 如何修改 VIM 制表符的空格数?
- ESXI服务器的四个网口负载均衡
热门文章
- JS 实现兼容浏览器报警提示声音
- 7.3.5 Tomcat堆溢出分析(1)
- Splunk 丰富数据方法
- SQLServer 2008 已成功与服务器建立连接,但是在登录前的握手期间发生错误。 (provider: SSL Provider, error: 0 - 等待的操作过时。
- pycharm中运行成功的python代码在jenkin中运行问题总结
- 服务器硬盘--SAS盘和SATA盘
- python_13 面向对象
- mount.cifs permission denied
- laravel5.6中jquery+ajax分页
- FICO-初级会计学