使用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 就可以让编译、删除中间文件、执行输出文件自动执行了。

最新文章

  1. WPF整理-跨程序集访问资源
  2. Emgu.CV/opencv 绘图 线面文字包括中文
  3. PAT 1015. 德才论 (25)
  4. DRAM 内存介绍(二)
  5. matlab演奏最炫民族风的代码注释
  6. 【LeetCode】5. Longest Palindromic Substring 最大回文子串
  7. Android实例-手机震动(XE8+小米2)
  8. jquery升级到新版本报错[jQuery] Cannot read property ‘msie’ of undefined错误的解决方法(转)
  9. Mac中QT程序发布
  10. 原生JavaScript如何解决父元素查找指定类名的子元素的问题
  11. [HNOI 2004]宠物收养场
  12. ajax请求code:200但是进入error函数
  13. ping不通公网ip时路由器设置
  14. SQL-存储过程-010
  15. sealed关键字
  16. 几个文本处理工具的简单使用(wc,cut,sort,uniq,diff和patch)
  17. remote staging type or host is not specified
  18. spring boot thymeleaf
  19. 如何修改 VIM 制表符的空格数?
  20. ESXI服务器的四个网口负载均衡

热门文章

  1. JS 实现兼容浏览器报警提示声音
  2. 7.3.5 Tomcat堆溢出分析(1)
  3. Splunk 丰富数据方法
  4. SQLServer 2008 已成功与服务器建立连接,但是在登录前的握手期间发生错误。 (provider: SSL Provider, error: 0 - 等待的操作过时。
  5. pycharm中运行成功的python代码在jenkin中运行问题总结
  6. 服务器硬盘--SAS盘和SATA盘
  7. python_13 面向对象
  8. mount.cifs permission denied
  9. laravel5.6中jquery+ajax分页
  10. FICO-初级会计学