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

时间: 2024-11-29 08:27:40

使用gcc命令编译多个文件的相关文章

gcc在编译时头文件路径和动态链接库路径

在使用gcc编译连接生成可执行文件时,经常会碰到变量未定义.链接时或者运行可执行文件时找不到相应的动态库等问题,本文首先介绍了gcc在编译时头文件路径相关选项以及搜索路径顺序,然后讨论了编译成可执行文件时动态库的搜索路径顺序,最后说明了生成可执行文件后,运行文件时动态库的搜索路径顺序.搞清楚这三个搜索路径,在用gcc碰到的未定义变量或搜索不到动态库的问题,基本上都可以解决了. 头文件路径编译时相关选项 gcc可以使用选项-I(注意是大写)来指定头文件搜索路径,即头文件所在的文件夹.指定的路径即可

Keil5.15使用GCC编译器链接.a库文件

我们知道,当使用第三方的代码时,人家有可能会扔个Lib文件给你.这时候,别人仅仅要提供header文件给你,则你就能够通过Lib文件及header的函数声明,对Lib中的函数进行调用.在Keil中假设使用ARMCC调用Lib文件,相信大家都能从网上找到方法.那假设在Keil中使用GCC来链接第三方GCC编译好的Lib文件--".a"应该怎样呢? 在告诉大家方法之前,我们写个简单的函数,然后用GCC编译器编译产生.a文件,便于我们进行測试. 首先,在Keil中配置gcc编译环境,这个能够

linux gcc编译多个文件的方法

假设源程序文件名为test.c. 1. 无选项编译链接 用法:#gcc test.c 作用:将test.c预处理.汇编.编译并链接形成可执行文件.这里未指定输出文件,默认输出为a.out. 2. 选项 -o 用法:#gcc test.c -o test 作用:将test.c预处理.汇编.编译并链接形成可执行文件test.-o选项用来指定输出文件的文件名. 3. 选项 -E 用法:#gcc -E test.c -o test.i 作用:将test.c预处理输出test.i文件. 4. 选项 -S

27>>gcc编译时头文件和库文件搜索路径

一.头文件 gcc 在编译时寻找所需要的头文件 : ※搜寻会从-I开始(gcc 参数,指定头文件搜索位置) ※然后找gcc的环境变量 C_INCLUDE_PATH,CPLUS_INCLUDE_PATH,OBJC_INCLUDE_PATH ※再找内定目录 /usr/include /usr/local/include /usr/lib/gcc-lib/i386-linux/2.95.2/include /usr/lib/gcc-lib/i386-linux/2.95.2/../../../../i

gcc命令以及makefile文件

(一)makefile里涉及到的gcc命令 gcc -I./inc:指定头文件寻找目录 将按照 ./inc --> /usr/include --> /usr/local/include的顺序寻找头文件 gcc -L./lib:指定库文件的寻找目录 将按照 ./lib --> /usr/lib --> /usr/local/include的顺序寻找库文件 gcc -ltest 将使用libtest.so动态链接库或libtest.a静态链接库,优先使用libtest.so gcc

命令行编译的class文件在Myeclipse的服务器上产生UnsupportedClassVersionError的解决办法

假设我们已经在命令行里面把java文件编译成class文件了.然后把它布置到tomcat服务器上,则我们可以看到服务器的控制台上会出现以下信息 其中我们关心的一行是 严重: Exception invoking periodic operation: java.lang.UnsupportedClassVersionError: FirstServlet2 : Unsupported major.minor version 52.0 (unable to load class FirstServ

使用ar命令删除iOS静态库重复编译的.o文件

关于 xcode引入第三方静态类库 duplicate symbol _OBJC_XXX 重复编译错误 看这里 http://www.cnblogs.com/cocoajin/p/3917709.html 之前提到了两种方式: 一种是修改xcode编译选项:一种是在打包时去掉一方: 今天有第三种方式: 直接使用ar命令在其中一个包中删除指定的重复编译的.o文件: 如下场景演示 静态库libTaobao.a 里面编译有CEO.m 文件并且有 ceo方法 静态库libBaidu.a 里编译有CEO.

java学习总结(16.05.08)在windows下使用cmd命令行对java文件进行编译和执行

windows下利用cmd命令行可以调用jdk里的javac.exe和java.exe对java文件进行编译和执行,前提是jdk已成功安装并正确配置相关环境变量(jdk安装与环境变量的配置方法:http://blog.csdn.net/qq_32099621/article/details/51339868) 下面来说一下windows下如何使用cmd命令行来编译执行java文件 首先找到需要编译和执行的java文件 这里我要编译和执行这个java文件 按组合键win+r调出"运行",

GCC的编译和安装 很好的资料

http://blog.csdn.net/yrj/article/details/492404 1.GCC的编译和安装2.预处理    #define 可以支持不定数量的参数.    例子如下:    #define err(...) fprintf(stderr,__VA_ARGS__)    err("%s,%d/r/n","The error code:",48);    扩展为:    fprintf(stderr,"%s,%d/r/n"