0

我试图理解makefile。我有以下文件:

main.c
(includes progA.c progB.c progC.c)

progA.c
(includes progA.h)

progB.c
(includes progA.c)

progC.c

我试图创建一个makefile,但不确定它是否正确:

main.o: main.c progA.o progB.o progC.o
    gcc -c main.c

progA.o: progA.c progB.o
    gcc -c progA.c

progB.o: progB.c progB.h
    gcc -c progB.c

progC.o: progC.c 
    gcc -c progC.c

有人可以帮我理解。我试图查看教程,但给出了不同的信息。

另外,我该如何实际运行它来测试?

4

2 回答 2

1

对于您的问题,以下 makefile 应该可以完成这项工作。您可以通过简单地键入make或者make -f <name_of_makefile>如果您的 makefile 具有自定义名称(例如build_main)来运行 makefile

all: main

main: main.o progA.o progB.o progC.o
    gcc -o main main.o progA.o progB.o progC.o

main.o: main.c     
    gcc -c main.c   

progA.o: progA.c
    gcc -c progA.c

progB.o: progB.c
    gcc -c progB.c

progC.o: procC.c
    gcc -c progC.c

要构建可执行文件,对象main.o progA.o progB.o progC.o是必需的,如main:.

编译规则由以下四节给出main.o progA.o progB.oprogC.o

makefile 的一般格式是

target: dependencies
[tab] system command
于 2013-10-26T13:16:16.557 回答
0

这看起来很奇怪:

progA.o: progA.c progB.o
  gcc -c progA.c

通常一个 makefile-"line" 包含三个部分:

  • target:这应该是命令行执行的结果。一个目标是特殊目标,即第一个;通常这被称为“全部”并依赖于主要目标(例如可执行文件)
  • 依赖项:这是用于在命令行中创建目标的所有文件,显式如源文件 end 隐式如#include 文件
  • 命令行:从依赖文件创建目标的命令
于 2013-10-26T13:09:13.123 回答