热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

windows下使用makefile

1.      准备工作: 程序:MinGW-3.1.0-1.exe     windows下的gcc,编译c语言的工具下载地址:http:umn.dl.sourceforge.


  1. 1.       准备工作: 

程序:

MinGW-3.1.0-1.exe      windows下的gcc,编译c语言的工具

下载地址: http://umn.dl.sourceforge.net/sourceforge/mingw/MinGW-3.1.0-1.exe

 make                           按照makefile规则编译程序的工具

位置 :window/system32下,如果没有可以在 http://www.mingw.org/download.shtml找到

配置环境: 

环境变量配置 :

控制面板> >高级 >环境变量 >系统变量 >添加MinGW 安装目录下的bin目录到path中去,或者命令行下运行:set PATH=  MinGW 安装目录下的bin目录

C:\WINDOWS\system32用上边方法添加到path中以找到make.exe

 

创建四个文件:

//---------------------------Main.c : ---------------------------//

#include "stdio.h"

main()

{

    func();

    printf("this is main\n");

    getch();

}

 

//---------------------------func.c : ---------------------------//

#include "stdio.h"

func()

{

    printf("this is func\n");

    getch();

}

 

一个空文件,文件名为makefile或者Makefile,这个文件名是必须的因为make默认查找该文件

 

创建compile.bat文件

内容为:

make

cmd

 

 




  1. 2.       编写makefile

示例:

test:main.o func.o      

       gcc -o test main.o func.o      

func.o:func.c   

       gcc -c func.c      

main.o:main.c      

       gcc -c main.c      

 

1行:生成test可执行文件,它的依赖于main.o func.o,也就是说生成test你得先生成它们,

2行:gcc前边必须是tab也就是7个空格,表示编译生成test

后边是依赖项的生成规则

 

然后运行compile.bat就可以生成test.exe文件了,同时会附加生成func.omain,o两个中间代码的文件,类似于VC中的obj文件

 




  1. 3.       makefile的编写规则 

可以参看:http://www.stlchina.org/twiki/bin/view.pl/ScriptProgram/LearnMakefile




  1. 4.       gcc的参数 

VC,TC等编译器不同,GCC其实是可以很方便的在提示符下编译程序的。GCC在提示符下编译程序,并没有如同VC那样的冗长而晦涩的编译参数。相反,却有着比VC更灵活且简短的参数。

不得不承认,不懂GCC编译参数的人,确实会损失一些GCC的强大功能。所以,我下面简单介绍一下GCC的一些基本编译参数。这里,我以C编译器为例。

 

编译二进制代码








$gcc -c yours.c -o yours.o


使用这段指令,GCC将会把yours.c编译成yours.o的二进制代码。其中,yours.o就类似于VC,TC中的.obj文档。

 

编译最简单的小程序。








$gcc -o yours yours.c


通过这条指令,GCC将会把yours.c源代码编译成名为yours的可执行程序。当然,您也可以将yours.c改成我们刚才介绍的yours.o文件。这样,gcc将使用编译刚才编译好的二进制文档来链接程序。这里,格式的特点是,-o 后面是一串文件列表,第一个参数是所编译程序的文件名,从第二个开始,就是您编译和连接该可执行程序所需要的二进制文档或者源代码。

 

编译时将自己的头文件目录设为默认头文件目录








$gcc -I”Your_Include_Files_Document_Path” -c yours.c -o yours.o


这条指令中的-I参数将会把Your_Include_Files_Document_Path添加到你默认的头文件目录中。这样您将可以使用 #include 来导入头文件。

 

编译时使用自己的静态库存放目录








$gcc -L”Your_Lib_Files_Document_Path” -o yours yours.o


这条指令将会让GCC在连接时除了在默认Lib存放目录中搜索指定的静态库以外,还会在Your_Lib_Files_Document_Path中搜索。

 

编译时使用静态连接库








$gcc -lyour_lib -o yours yours.o


这条指令将会让GCC在连接时把 libyour_lib.a中您所用到的函数连接到可执行程序中。此处注意,GCC所使用的静态连接库是lib*.a格式的。在连接时,只且仅需要提供*的内容就可以了。

 

编译时使用优化








$gcc -O2 -c yours.c -o yours.o


使用优化方式编译程序,其中除了-O2以外,还有-O3 -O1等等。他们代表不同的优化等级。最常用的,是-O2优化。当然,还有针对特殊CPU的优化,这里就不介绍了。

 

编译时显示所有错误和警告信息








$gcc -Wall -c yours.c -o yours.o


GCC在默认情况下,将对一些如变量申请未使用这样的问题或者申请了没有给予初始值的问题忽略。但是,如果使用了-Wall参数,编辑器将列出所有的警告信息。这样,您就可以知道您的代码中有多少可能会在其他操作系统下出错的地方了。(用这个指令看看你的代码有多少地方写的不怎么合适。)

 

编译连接时,加入调试代码








$gcc -g -o yours yours.c


正如同VCdebug编译模式一样,GCC也有debug模式。添加了-g 参数编译的可执行程序比普通程序略为大一些,其中添加了一些调试代码。这些代码将被gdb所支持。

 

连接时缩小代码体积








$gcc -s -o yours yours.o


这个参数,似乎我没有在Unix环境下看到过。也不知道具体什么作用。因为有人说Visual-MinGW生成的代码小,于是研究了一下她的编译参数,发现release模式的编译参数就加了这一项。貌似编译后的代码的确缩小了很多。

 

获得帮助








$gcc --help


这条指令从意思上就能看出,获得gcc的帮助信息。如果您有什么特殊需要,也许这个指令能帮上点小忙。

 

以上转自:http://blog.csdn.net/zhanghan3/archive/2006/10/14/1334308.aspx

 

以下是要注意的事项:

1:上面的链接地址不可用,最新mingw的下载地址为:http://sourceforge.net/projects/mingw/files/Automated%20MinGW%20Installer/

 

2: 安装之后,在mingw\bin下面并不会存在make.exe文件,需要更改mingw32-make.exe为 make.exe



推荐阅读
  • 本文详细介绍了如何在Linux系统中搭建51单片机的开发与编程环境,重点讲解了使用Makefile进行项目管理的方法。首先,文章指导读者安装SDCC(Small Device C Compiler),这是一个专为小型设备设计的C语言编译器,适合用于51单片机的开发。随后,通过具体的实例演示了如何配置Makefile文件,以实现代码的自动化编译与链接过程,从而提高开发效率。此外,还提供了常见问题的解决方案及优化建议,帮助开发者快速上手并解决实际开发中可能遇到的技术难题。 ... [详细]
  • 本文通过分析一个具体的案例,探讨了64位Linux系统对32位应用程序的兼容性问题。案例涉及OpenVPN客户端在64位系统上的异常行为,通过逐步排查和代码测试,最终定位到了与TUN/TAP设备相关的系统调用兼容性问题。 ... [详细]
  • 对于以压缩包形式发布的软件,其目录中通常包含一个配置脚本 `configure`。该脚本的主要功能是确定编译所需的各项参数,如头文件的位置和链接库的路径,并生成相应的 `Makefile` 以供编译使用。通过运行此脚本,开发者可以确保软件在不同环境下的正确编译与安装。此外,该脚本还能够检测系统依赖项,进一步提高编译过程的可靠性和兼容性。 ... [详细]
  • 在 CentOS 7 上部署和配置 RabbitMQ 消息队列系统时,首先需要安装 Erlang,因为 RabbitMQ 是基于 Erlang 语言开发的。具体步骤包括:安装必要的依赖项,下载 Erlang 源码包(可能需要一些时间,请耐心等待),解压源码包,解决可能出现的错误,验证安装是否成功,并将 Erlang 添加到环境变量中。接下来,下载 RabbitMQ 的 tar.xz 压缩包,并进行解压和安装。确保每一步都按顺序执行,以保证系统的稳定性和可靠性。 ... [详细]
  • 在1995年,Simon Plouffe 发现了一种特殊的求和方法来表示某些常数。两年后,Bailey 和 Borwein 在他们的论文中发表了这一发现,这种方法被命名为 Bailey-Borwein-Plouffe (BBP) 公式。该问题要求计算圆周率 π 的第 n 个十六进制数字。 ... [详细]
  • 本文详细介绍了如何在Windows操作系统中配置和使用Lex(Flex)与Yacc(Bison),包括软件的下载、安装以及通过示例验证其正确性的步骤。 ... [详细]
  • c语言二元插值,二维线性插值c语言
    c语言二元插值,二维线性插值c语言 ... [详细]
  • 使用QT构建基础串口辅助工具
    本文详细介绍了如何利用QT框架创建一个简易的串口助手应用程序,包括项目的建立、界面设计与编程实现、运行测试以及最终的应用程序打包。 ... [详细]
  • 本书详细介绍了在最新Linux 4.0内核环境下进行Java与Linux设备驱动开发的全面指南。内容涵盖设备驱动的基本概念、开发环境的搭建、操作系统对设备驱动的影响以及具体开发步骤和技巧。通过丰富的实例和深入的技术解析,帮助读者掌握设备驱动开发的核心技术和最佳实践。 ... [详细]
  • 个人博客https:juejin.cnuser176366088104638和http:blog.wuzhenyu.com.cncmake编译动态库和链接动态库cmake中&#x ... [详细]
  • Beetl是一款先进的Java模板引擎,以其丰富的功能、直观的语法、卓越的性能和易于维护的特点著称。它不仅适用于高响应需求的大型网站,也适合功能复杂的CMS管理系统,提供了一种全新的模板开发体验。 ... [详细]
  • 汇编语言:编程世界的始祖,连C语言都敬畏三分!
    当C语言还在萌芽阶段时,它首次接触到了汇编语言,并对其简洁性感到震惊。尽管汇编语言的指令极其简单,但它却是所有现代编程语言的基础,其重要性不言而喻。 ... [详细]
  • TQ210UBOOT移植笔记添加自己的单板【学习笔记】
    在uboot的源码的根目录下的readme中有介绍如何在uboot中添加自己的单板:一、在boards.cfg中添加自己的单板的信息,可以模仿smdkc ... [详细]
  • 在 Debian 11 系统中部署 CMake 的详细步骤与最佳实践
    CMake是一个免费、开源、跨平台的工具系列,旨在构建、测试和打包软件. CMake用于使用简单的平台和独立于编译器的配置文件来控制软件编译过程,并生成可在您选择的编译器环境中使用 ... [详细]
  • PyFasterRCNN配置详解与优化指南
    本文主要讲解Faster-RCNN的配置过程,以及配置过程中遇到问题的解决方案。 1.下载工程gitclone--recursivehttps:github.comr ... [详细]
author-avatar
海风
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有