创建具有依赖项的makefile

时间:2013-10-26 12:22:05

标签: c makefile

我正在尝试理解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

请有人帮我理解。我试着看一下教程,但是给出了不同的信息。

另外,我如何实际运行此测试?

2 个答案:

答案 0 :(得分:1)

对于您的问题,以下makefile应该可以完成这项工作。如果您的makefile具有自定义名称(例如make),则只需键入make -f <name_of_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

答案 1 :(得分:0)

这看起来很奇怪:

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

通常一个makefile-“line”有三个组成部分:

  • target:这应该是执行命令行的结果。一个特征是特殊目标,即第一个;通常这称为“所有”并依赖主目标(例如可执行文件)
  • 依赖项:这是用于在命令行中创建目标的所有文件,显式类似于源文件结尾,如#include files
  • 命令行:从从属文件创建目标的命令