【问题标题】:make file multiple executables制作文件多个可执行文件
【发布时间】:2013-07-24 21:45:33
【问题描述】:

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

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

如何为此编写 make 文件?

例如。 Common\*.c - 生成目标文件 App\*.c - 生成目标文件。 - 指Common目录下的.o文件 UnitTest\.c - 这些文件应该被编译为可执行文件。参考目录 App 和 Common 中的 *.o。

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

的单独目录中

为此,我需要一个单独的 makefile。请帮忙。

【问题讨论】:

  • 你使用头文件吗?他们在哪里?
  • @Beta,头文件位于名为 \Include 的单独目录中
  • 对于UnitTest/中的每个文件,你知道它需要Common/和Apps/中的哪些文件吗?
  • 需要任何 Common 或 Apps 的文件。将来用户可以在 Common 文件夹文件中定义宏。或更多源代码将进入 App 文件夹,我们必须从 UnitTest 文件夹中进行测试。
  • 那么你最好构建库。你熟悉这些吗?

标签: c gcc makefile


【解决方案1】:

根据标准,每个目录都将包含一个 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 完成所有这些操作,您也可以这样做。在这里,您必须通过提供文件的路径来编译文件。秩序是最无能为力的。

【讨论】:

    【解决方案2】:

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

    CFLAGS += -I/include
    
    vpath %.h /include
    

    这应该足以在Common/、Apps/ 或UnitTest/ 中构建任何目标文件。 在继续之前先测试一下。

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

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

    在继续之前先测试一下。

    删除all 规则,并为公共库添加一个规则。 (我们现在将使用静态库,因为它更简单一些。)

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-05-30
      • 2021-02-12
      • 1970-01-01
      • 1970-01-01
      • 2015-06-05
      • 2012-03-29
      • 1970-01-01
      相关资源
      最近更新 更多