【问题标题】:How to write a single makefile, c files are in src and h files are in inc folder?如何编写单个makefile,c文件在src,h文件在inc文件夹中?
【发布时间】:2013-03-18 11:06:10
【问题描述】:

我正在尝试编写一个 makefile,它应该从 src/ 中选择源代码并从 inc/ 中选择标头

~/Linuz/src: 1.c, 2.c, 3.c ...

~/Linuz/inc: abc.h, dyz.h

请帮我创建一个makefile,它应该可以在

~/Linuz/some_other_dir/Makefile

PS:尝试为我的 linux 机器编译它。

感谢您的建议。

【问题讨论】:

  • @user2050283:尝试使用 TOP_DIR = /Linuz/ SRC_DIR = $(TOP_DIR)/src INC_DIR = $(TOP_DIR)/inc TEST_DIR = $(TOP_DIR)/test CFLAGS= -I$(INC_DIR) VPATH= -I$(SRC_DIR) testapp: CFLAGS:.o 如果我错了,请建议我。 makefile 架构非常新。谢谢!!

标签: c makefile gnu-make


【解决方案1】:
all: my_program

%.o: ../src/%.c
    $(CC) $(CFLAGS) -I../inc/ -c -o $@ $^

my_program: 1.o 2.o 3.o 
    $(CC) $(LDFLAGS) -o $@ $^

clean:
    rm -f *.o my_program

如果你把你的 Makefile 放在 ~/Linuz/some_other_dir/ 中,下面的规则

%.o: ../src/%.c

将从../src/文件夹(~/Linuz/src/)获取c文件,并在Makefile的同一文件夹中创建对象(*.o)文件。

-I../inc/ 选项表示makefile 可以从../inc/ 文件夹(~/Linuz/inc/)中获取头文件。

my_program: 1.o 2.o 3.o 规则意味着 makefile 将在 Makefile 的同一目录中从目标文件 1.o2.o3.o 创建二进制文件

来自make manual

$^ 所有先决条件的名称,它们之间有空格。 对于归档成员的先决条件,只有名为的成员是 使用(见档案)。一个目标彼此之间只有一个先决条件 文件取决于,无论每个文件被列为多少次 先决条件。因此,如果您不止一次列出一个先决条件 目标,$^ 的值只包含名称的一份副本。这份名单 不包含任何仅订购的先决条件;对于那些看到 `$|'变量,如下。

$@ 规则目标的文件名。如果目标是一个 存档成员,则“$@”是存档文件的名称。在一个 具有多个目标的模式规则(请参阅模式简介 规则),'$@' 是导致规则配方的目标的名称 运行。

【讨论】:

  • 如果你写一些话来解释为什么这样有效,我会投赞成票。
  • @Mohamed KALLEL,感谢您的文章!您想在这里简单介绍一下 $@ 和 $^ 是什么吗?
  • 谢谢 Mohamed KALLEL 感谢您的笔记!!
猜你喜欢
  • 2018-11-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-10-08
  • 1970-01-01
  • 1970-01-01
  • 2017-03-30
  • 1970-01-01
相关资源
最近更新 更多