c语言编译运行出现Makefile.win已经改变,怎么改?

编写Makefile是一个苦乐交织的事情,快乐是因为从一堆需要手工逐个处理的编译过程,进步到一条命令完成,看着代码顺畅的在屏幕上滚动,编译为最终的产品,那个过程无比愉悦;而痛苦则是,写代码已经很累了,写完代码还要编写Makefile,这多出来的一点工作,很有点最后一根稻草的感觉。
最近整理手头的几个项目,把C语言类的Makefile抽象、合并了一下,形成了一个比较通用的编译脚本,这里分享一下:

#自己特定的编译参数,这里仅为示例,这个参数是消除mac编译openssl类程序用的 #定义输出文件夹,outs默认等于是./outs #定义.o中间文件的路径,这个路径编译完成可以清除 #扫描所有的c源码,这里默认src中所有文件都是相当于库文件,最终编译为.o #搜索出来的文件包含了src路径,这里也去掉,便于后面编译到临时目录 #编译所有的库文件由.c至.o #因为VPATH的存在,源文件会自动检索src目录 #利用所有的库文件编译主程序

这个编译脚本的主要特点是自动扫描所有的源文件,然后逐个编译,对于大多c类的项目,基本只需要定义一下主程序就可以完成编译了,其实根据同样的原理连主程序都一起扫描、编译也是可以的,只是似乎自由度太差了。
脚本简单修改可以适应各种环境,比如下面再贴一个ios使用的,ios如果非越狱的话,直接编译成可执行文件是没有意义的,这里我们假设编译成.a库文件,供xcode来调用:

#iphone6以后都是arm64了,所以这里不再考虑armv7,另外也不考虑模拟器运行了 #如果有需要可以根据自己的需求修改 #编译所有的库文件由.c至.o

在主要的编译环节,还有下面这种常用的办法,只是自己运算得到了源文件名而没有用Make系统的自动搜索功能而已:

对于更复杂的编译模式,建议把每个编译环节定义成子程序来执行,可以具备更多的灵活性。另外当前这个脚本有一个bug就是每次编译实际上所有的.o文件都会完整重新编译一遍,而没有判断源文件是否更新并忽略没有更新的源文件,所以不适合大的系统。

  • 最下面再说明原因和提供第二种解决方案

     我的情况是一开始写代码的时候一点问题没有然后再继续写的时候就出现了报错

    点击之后再次运行就ok了

    由于我的这个项目下面不止一个文件 他们的main函数重名了

    也就是说第一个文件叫main的时候 第二个就得改掉

    只需要把main改名比如改成main1啥的(随便起)问题就解决了

    如果不想改名也可以参考上面的解决方法

  • makefile很重要  什么是makefile?或许很多Winodws的程序员都不知道这个东西,因为那些Windows的IDE都为你做了这个工作,但我觉得要作一个好的和professional的程序员,makefile还是要懂。这就好像现在有这么多的...

  • 使用 vc 的nmake 命令编译时,经常出现找不到头文件之类的错误,而这些头文件明明是存在的。原因是环境变量的问题。 1.检查系统环境变量,是否加入visual studio的安装路径:vs安装路径\VC\Bin 以及vs安装路径\...

  • 工程原本可以正常构建并运行,对工程做修改后重新构建报错MakeFile Error 1,影子构建已取消勾选。 环境 在win7系统中装有多版本VS和QT: VS2010 VS2015 QT 5.5.1 QT 5.7.1 解决 将该工程复制一份副本,构建该副本...

  • 在github中导入项目后,按照项目要求执行make命令安装makefile文件中的配置时报错: make : 无法将“make”项识别为 cmdlet、函数、脚本文件或可运行程序的名称。请检查名称的拼写,如果包括路径,请确保路径正确,...

  • Makefile - 旧式后缀规则 后缀规则是一种 make 定义隐式规则的旧式方式。模式规则更加通用、清晰,后缀规则已经被废弃。为了兼容旧的 makefiles,GNU make 依然支持后缀规则。后缀规则有两种形式:双后缀和单后缀。 ...

  • 【一步步学习编写MakefileMakefile介绍 在学习Makefile之前,首先介绍一下make命令,make命令是GNU的工程化编译工具,它用于编译大量互相关联的源代码,使用它可以实现项目的工程化管理,提高开发效率。那么对于...

我要回帖

更多关于 c语言编译器 的文章

 

随机推荐