自从IDE的出现简化了代码文件之间关联性管理后,就没多少愿意用makefile管理工程的了。makefile的语法规则也不复杂,加上后续的automake让编写的东西又简化了不少,但是相比IDE点一下build的操作来说依然是没有可比性的。各个平台下的IDE对工程文件的规则都不一样,想要工程跨平台唯一适合互通的也就只有makefile了,想必这也是目前makefile还依然活跃的重要理由之一吧。

微软的IDE从VC 6以后就越发的对makefile不友好了,之前的导入导出操作在后续的VS里都没了,估计总觉得GNU Make 不适合垄断吧,搞了个NMake的标准,非但没GNU Make灵活(嵌套层次支持少,不支持单字符变量)自个的VS支持起来也不顺。

但凡免费的第三方库,大都只提供makefile而不提供. vcproj,搞得想在VS里编个库用用还得自己组织一边,大工程搞起来甚为麻烦。笔者被反反复复的转工程折腾几次后,似乎找到了个救命稻草- VS的 makefile project。

这种工程并不能帮你简化编写makefile的过程,也不能帮你导出已有vcproj工程到一个makefile里,它的目的很简单就是把符合NMake规则的makefile和代码文件拽到一个虚拟的文件夹里,方便习惯了用solution explorer(SE)的人来修改管理这些东西,调用cl.exe和link.exe来执行makefile的内容生成当前平台下的目标文件(exe|lib|dll)。与其他工程不一样的是即便加到solution explorer里,源文件并不会编译中间代码。

基于以上目的,该工程的Wizard也很是简陋:

 

其实算得上有用的也是左边的3个command line,这里需要填写的是nmake xx,xx为makefile里定义的某个目标,一般来说makefile里都会有all和clean这2个目标,rebuild无非是把clean + all 放一起就行了。还得去掉默认的输出,要不和makefile里的重复了。点击finish以后就可以把工程里的所有文件按你的习惯加入到SE中了,需要注意的一点是如果不想写太复杂的command,需要保证makefile文件的命名为makefile(大小写均可),并放在该vcproj文件同级目录。

 

从一个makefile工程到vs里的简化流程应该如下:

1 在源文件夹中顶级目录下makefile(一般每个子目录下都会有个makefile)所在位置创建该工程vcproj.

2 按makefile中的目标填写command line

3 把工程中需要修改或管理的文件按习惯加入到solution explorer中

4 点击编译,如果失败就得按照output的提示适当修改makefile,常见的问题都是makefile里有不符合nmake规则或是编译标志设置的是gcc环境的那些宏和变量等等。(如果工程里有带.nmake后缀的文件,果断重命名替换原有的makefile)