2012-01-01 161 views
0

我想知道编译使用多个文件的程序的好方法,并且我想避免重新编译未修改的文件。编译脚本

它适用于Linux,我正在寻找与Makefile不同的东西。

Makefile存在一些问题:
写了很长时间,只要我创建新文件,它就变得很冗长; C/C++使用头文件。
如果包含包含另一个已修改的.h文件的.h文件,Makefile不会重新编译.c文件。它需要复杂的语法。
Makefile使用制表符,它不好,因为我使用Tab键缩进(它插入4个空格字符代替)。

举个例子,我原来的编译脚本是:

gcc file1.c -c -flags1 
gcc file2.c -c -flags2 
gcc file3.c file4.c -c -flags3 
gcc file1.o file2.o file3.o file4.o -o a.out 

我想避免重新编译究竟是不是需要用简单的方法。

+0

人们不得不想知道每个.c文件的不同标记是怎样处理的。 – 2012-01-01 05:01:32

+0

请注意,您的四位空间问题在您的编辑器(或编辑器设置)中是不足的,而不是使用'make'本身。任何不允许插入任意字符的编辑器都会死机。 – paxdiablo 2012-01-01 05:13:11

+0

关于makefile中的选项卡,如果你想要别的东西,就有'.RECIPEPREFIX'。 – 2012-01-01 05:15:58

回答

1

一些项目(Doom3,MongoDB和其他)使用SCons

它是用Python编写的,有许多功能(如并行编译)。

3

UPDATE:本文中提到的Make教程不再存在,这是一个非常糟糕的耻辱,因为它是一个非常好的介绍。

Makefiles可以是无缝的,你可以让它自动编译你的项目,完全基于项目目录中的文件。请参阅Make Tutorial。在该教程之后,您将学会创建动态Makefile脚本,该脚本仅编译已修改的脚本,并遵循依赖关系树。

但是,如果你想看到一些进一步的巫术,看看在DevKitPro的makefile,他们去尽量搞清楚头依赖也使用的是什么,我只能推测是使用grep的。随意修改它为您自己的项目。

2

您也可以使用其他一些构建器,例如, omake build systemP.Millier's cook system等我认为omake是非常强大的。使用其他构建器的缺点是每个Linux系统通常都有make,但不是omake(或cmakecook)的情况。

不要忘记,make依赖关系可以通过gcc几个preprocessor options-M等产生。在实践中,你可以使用GNU让诡计,以避免编写复杂Makefile -s。

好的编辑器,例如, emacs为您提供了特定模式以帮助编辑(&突出显示)Makefile-s。

你可以使用(甚至内部Makefile -s或omake或其他制造商)的ccache编译器缓存(它可以通过符号链接它作为gcc“透明”使用)。

您可以将编辑分发到本地网络上的其他机器,例如, distccicecream。当然,许多编译器允许并行编译(例如make -j)。

存在着几个Makefile发电机,特别是GNU autotools套件和cmake

不要忘了使用版本控制系统(如GIT)为您的源代码。

+0

+1:我用过OMake,使用起来非常简单,同样具有表现力。 – 2013-05-28 00:42:44

0

我发现了一个更简单的方法来使用makefile,它的工作原理。没有制表。使用touch,我可以强制依赖头文件编译。

myexe.out: file1.o file2.o;\ 
g++ file1.o file2.o -o myexe.out 

file1.o: file1.cpp;\ 
g++ -c file1.cpp -flags1 

file2.o: file2.cpp header1.hpp;\ 
g++ -c file2.cpp -flags2 

header1.hpp: header2.hpp;\ 
touch header1.hpp 

我会尝试SCons。
感谢大家。

+0

你也应该看看'omake'! – 2012-01-07 07:44:22