0

*.c我有一个由许多单元文件组成的中型项目。

在“正常”编译练习中,程序是从其目标文件构建的,这些目标文件作为配方*.o中主程序的先决条件传递。Makefile这适用于并行构建:使用make -j,所有这些目标文件都并行编译,然后在最后链接在一起。它使整个构建体验更快。

但是,在其他情况下,先决条件列表作为*.c单元文件列表而不是 *.o目标文件列表传递。最初的意图是不构建这些目标文件,因为它们可能会污染缓存。现在,这可能会以不同的方式完成,但是对于这个特定的项目,Makefile是一个不可变的对象,所以它不能被更新,我们必须忍受它。

make -j在这种情况下, using无效,因为gcc将有效地直接在单个命令行上接收完整的单位列表。这意味着,make不再能够组织并行性。

我剩下的唯一机会是将标志和参数传递给make. 我试图找到一个可以gcc在内部并行编译单元列表的方法。我找不到任何东西。在互联网上搜索,我发现猜测说“既然make可以并行构建,gcc就不需要复制这个功能”。但没有解决办法。

那么问题来了:如何处理呢?

假设像这样的编译行gcc *.c -o final_exe,可以通过标准标志(、、、、)进行更改CC,是否CFLAGS有任何选项可以使其并行构建这些单元?CPPFLAGSLDFLAGS

4

0 回答 0