【问题标题】:Best way to create multiple .o创建多个 .o 的最佳方法
【发布时间】:2020-10-31 18:23:51
【问题描述】:

我在 src/ ,main1.c,main2.c,main3.c,main4.c 中有 4 个“.c”文件。我想分别在 bin/ 中创建 main1.o、main2.o、main3.o、main4.o。我可以为此编写一个makefile,但是以一种非常新奇的方式。为这个问题编写makefile的最佳方法可能是什么。我想要一个命令。现在我正在做以下事情。

all: src/main1.c src/main2.c
     gcc-Wall -fpic -c src/main1.c -o bin/main1.o
     gcc-Wall -fpic -c src/main2.c -o bin/main2.o 

【问题讨论】:

  • “一个单一的命令”可能是指“一个单一的目标”吗?因为如果没有,gnumake documentation 中有大量示例说明如何设置多目标 make 配置。
  • 是的,我的意思是目标

标签: c gcc makefile


【解决方案1】:

在 make 中,您要定义要创建或更新的目标。在这里,您的all 目标依赖于源文件,这是错误的:您不想 make 创建源文件。源文件已经存在。您要在 bin 目录中创建目标文件。

所以,您的all 规则应该是:

all: bin/main1.o bin/main2.o

现在,你必须教 make 如何从 src/xxx.c 创建一个 bin/xxx.o

您可以通过编写pattern rule 来做到这一点,这是一个模板,make 可以使用它来确定如何构建事物。例如:

bin/%.o : src/%.c
        gcc -Wall -fpic -c $< -o $@

$&lt;$@automatic variables,make 将在尝试运行之前为您的配方设置,针对您要构建的每个目标。

就是这样!请参阅the manual 了解更多信息。

【讨论】:

  • 换句话说,在使用 makefile 时,您不会认为“这是我开始的,接下来我该怎么做?”相反,你会想,“这就是我想要结束的地方,让我到达那里的步骤是什么?那么在那之前的步骤是什么?”等等,直到你没有剩下任何步骤(你已经到达起点)
猜你喜欢
  • 2021-10-15
  • 1970-01-01
  • 1970-01-01
  • 2011-05-16
  • 2015-09-09
  • 2014-11-02
  • 1970-01-01
  • 1970-01-01
  • 2023-03-26
相关资源
最近更新 更多