*.c
我有一个由许多单元文件组成的中型项目。
在“正常”编译练习中,程序是从其目标文件构建的,这些目标文件作为配方*.o
中主程序的先决条件传递。Makefile
这适用于并行构建:使用make -j
,所有这些目标文件都并行编译,然后在最后链接在一起。它使整个构建体验更快。
但是,在其他情况下,先决条件列表作为*.c
单元文件列表而不是 *.o
目标文件列表传递。最初的意图是不构建这些目标文件,因为它们可能会污染缓存。现在,这可能会以不同的方式完成,但是对于这个特定的项目,Makefile
是一个不可变的对象,所以它不能被更新,我们必须忍受它。
make -j
在这种情况下, using无效,因为gcc
将有效地直接在单个命令行上接收完整的单位列表。这意味着,make
不再能够组织并行性。
我剩下的唯一机会是将标志和参数传递给make
. 我试图找到一个可以gcc
在内部并行编译单元列表的方法。我找不到任何东西。在互联网上搜索,我发现猜测说“既然make
可以并行构建,gcc
就不需要复制这个功能”。但没有解决办法。
那么问题来了:如何处理呢?
假设像这样的编译行gcc *.c -o final_exe
,可以通过标准标志(、、、、)进行更改CC
,是否CFLAGS
有任何选项可以使其并行构建这些单元?CPPFLAGS
LDFLAGS