Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/70.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 编译脚本_C_Linux_Compilation_Automation - Fatal编程技术网

C 编译脚本

C 编译脚本,c,linux,compilation,automation,C,Linux,Compilation,Automation,我想知道一个好方法来编译一个使用很多文件的程序,我想避免重新编译未修改的文件 它是针对Linux的,我正在寻找与Makefile不同的东西 Makefile有一些问题: 写起来很长,只要我创建新文件,修改起来就很冗长;C/C++使用头文件。 如果.c文件包含一个.h文件,而该文件包含另一个已修改的.h文件,则Makefile不会重新编译该文件。它需要复杂的语法。 Makefile使用制表字符,这不好,因为我使用tab键缩进(它插入4个空格字符) 例如,我的原始编译脚本是: gcc file1.c

我想知道一个好方法来编译一个使用很多文件的程序,我想避免重新编译未修改的文件

它是针对Linux的,我正在寻找与Makefile不同的东西

Makefile有一些问题:
写起来很长,只要我创建新文件,修改起来就很冗长;C/C++使用头文件。
如果.c文件包含一个.h文件,而该文件包含另一个已修改的.h文件,则Makefile不会重新编译该文件。它需要复杂的语法。
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

我想避免用简单的方法重新编译不需要的东西。

更新:这篇文章中提到的Make教程已经不存在了,这是一个可怕的耻辱,因为它是一个非常好的介绍

Makefiles可以是无缝的,您可以让它完全基于项目目录中的文件自动编译您的项目。看这个。在本教程之后,您将学习如何创建仅编译已修改内容并遵循依赖关系树的动态Makefile脚本


但是如果你想看一些更进一步的魔法,看看makefiles,它们甚至可以使用我只能假设的grep来计算头依赖关系。您可以为自己的项目随意修改它。

更新:本文中提到的Make教程已经不存在了,这是一个非常遗憾的介绍,因为它是一个非常好的介绍

Makefiles可以是无缝的,您可以让它完全基于项目目录中的文件自动编译您的项目。看这个。在本教程之后,您将学习如何创建仅编译已修改内容并遵循依赖关系树的动态Makefile脚本

但是如果你想看一些更进一步的魔法,看看makefiles,它们甚至可以使用我只能假设的grep来计算头依赖关系。您可以为自己的项目随意修改它。

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

它是用Python编写的,有很多特性(比如并行编译)。

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


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

你也可以使用其他的构建器,比如or等。我认为
omake
非常强大。使用其他构建器的缺点是,
make
通常在每个Linux系统上都可用,但不是
omake
(或
cmake
cook
)的情况

不要忘记,
make
依赖项可以由
gcc
生成,其中包括一些
-M
等。在实践中,您可以使用GNU make技巧来避免编写复杂的
Makefile
-s

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

您可以使用编译器缓存(甚至在
Makefile
-s内部或与
omake
或其他生成器一起使用)(通过将其符号化为
gcc
,可以“透明地”使用它)

您可以使用或将编译分发到本地网络上的其他计算机。当然,许多构建器允许并行编译(例如,
make-j

存在多个
Makefile
生成器,尤其是GNU套件和


不要忘记在源代码中使用版本控制系统(如GIT)。

您也可以使用其他生成器,如or等。我认为
omake
非常强大。使用其他构建器的缺点是,
make
通常在每个Linux系统上都可用,但不是
omake
(或
cmake
cook
)的情况

不要忘记,
make
依赖项可以由
gcc
生成,其中包括一些
-M
等。在实践中,您可以使用GNU make技巧来避免编写复杂的
Makefile
-s

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

您可以使用编译器缓存(甚至在
Makefile
-s内部或与
omake
或其他生成器一起使用)(通过将其符号化为
gcc
,可以“透明地”使用它)

您可以使用或将编译分发到本地网络上的其他计算机。当然,许多构建器允许并行编译(例如,
make-j

存在多个
Makefile
生成器,尤其是GNU套件和


不要忘记在源代码中使用版本控制系统(如GIT)。

我找到了一种更简单的方法来使用makefile,而且它很有效。没有表格。使用
触摸
,我可以强制执行与标题相关的编译

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
我要尝尝烤饼。

谢谢大家。

我找到了一种更简单的方法来使用makefile,而且效果很好。没有表格。使用
触摸
,我可以强制执行与标题相关的编译

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
我要尝尝烤饼。

感谢大家。

我们必须想一想,每个.c文件的不同标志是怎么回事。请注意,四个空格的问题是编辑器(或编辑器设置)中的缺陷,而不是
make
本身。任何不允许您插入任意字符的编辑器都是死板的。关于makefiles中的选项卡,如果您需要其他内容,可以使用
.RECIPEPREFIX
。我不明白您为什么不喜欢使用建筑软件(如
make
或其他内容)。您可以将编译命令放在shell脚本中(但我建议使用
omake
make
)。请参阅我的答复我配置了编辑器