使文件多个可执行文件

时间:2013-07-24 12:58:54

标签: c gcc makefile

我有一个名为UnitTest的文件夹。我有几个.c文件。所有文件都包含'main'函数。

使用makefile,我想一起编译该文件夹的所有.c文件。 但是这些文件依赖于不同文件夹中的其他C文件。

如何为此编写make文件?

例如。 Common \ * .c - 生成目标文件 App \ * .c - 生成目标文件。 - 引用Common目录的 .o文件 UnitTest \ .c - 这些文件应编译为可执行文件。请参阅App和Common目录中的* .o。

更新: 头文件位于名为\ Include

的单独目录中

我需要一个makefile。请帮忙。

2 个答案:

答案 0 :(得分:2)

根据标准,每个目录将包含一个Makefile。因此,如果您有三个目录,则可以为此工作完成三个Makefile。

(d) common
 |
 |---(f) common.h
 |---(f) common.c
 |---(f) Makefile --- MAkefile for the common folder.

(d) app
 |
 |---(f) app.h
 |---(f) app.c
 |---(f) Makefile

(d) unittest
 |
 |---(f) unittest.h
 |---(f) unittest.c
 |---(f) Makefile

(f) Makefile --- invoke all makefiles in the mentioned order. 

如果您想要完成所有这些Makefile,您也可以这样做。在这里,您必须通过提供文件的路径来编译文件。订单最无能为力。

答案 1 :(得分:1)

这很复杂,所以我们将分阶段进行。首先,构建目标文件:

CFLAGS += -I/include

vpath %.h /include

这应足以在Common/Apps/UnitTest/中构建任何对象文件。 在继续前进行测试。

现在在Common/中构建所有对象:

COMMONSOURCES := $(wildcard Common/*.c)
COMMONOBJECTS := $(COMMONSOURCES:.c=.o)

all: $(COMMONOBJECTS)

在继续之前测试一下。

删除all规则,并为Common库添加规则。 (我们现在将使用静态库,因为它有点简单。)

Common/libCommon.a: $(COMMONOBJECTS)
    ar -cvq $@ $^

测试那么多,在评论中告诉我们它是如何工作的,然后我们将构建Apps库和UnitTest可执行文件。