如何编写单个makefile,c文件在src和h文件是否在inc文件夹中?

时间:2013-03-18 11:06:11

标签: c makefile gnu-make

我正在尝试编写一个makefile,它应该从inc /

中选择src /和headers中的源代码

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

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

请帮我创建一个应该在

上提供的makefile

〜/ Linuz / some_other_dir /生成文件

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

感谢您的建议。

1 个答案:

答案 0 :(得分:5)

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)文件。 / p>

-I../inc/选项意味着makefile可以从../inc/文件夹(〜/ Linuz / inc / )获取头文件。

my_program: 1.o 2.o 3.o规则意味着makefile将从目标文件1.o2.o以及3.o

在Makefile的同一目录中创建二进制文件

来自make manual

  

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

     

$ @ 规则目标的文件名。如果目标是   归档成员,然后'$ @'是归档文件的名称。在一个   具有多个目标的模式规则(请参阅模式简介   规则),'$ @'是导致规则配方的任何目标的名称   要跑。