如何创建包含多个子目录的makefile

时间:2011-04-24 12:40:47

标签: c makefile

我有一个目录,下面有4个子目录,如下所示:

myDir:
myDir/Part1
myDir/Part2
myDir/Part3
myDir/shared

我想创建一个可执行文件,从shared获取文件,将其链接到Part2中的文件,并将可执行文件放在myDir中。

这是我尝试过的(只有makefile中相关的行):

Shared/helper.o:
gcc -ansi -pedantic-errors -c -Wall -Werror -g -o Shared/helper.o Shared/helper.c

以及makefile中的上面:

Part2/part2code.o: ../Shared/helper.o
gcc -ansi -pedantic-errors -c -Wall -Werror -g -o Part2/part2code.o Part2/part2code.c

以及makefile中的上面:

part2code: Part2/part2code.o  ../Shared/helper.o
gcc -ansi -pedantic-errors -Wall -Werror -g -lm -o part2code Part2/part2code.o  ../Shared/helper.o

(我也尝试过没有../共享之前)

我收到此错误:

No such file or directory.

帮助?

谢谢!

1 个答案:

答案 0 :(得分:2)

在此上下文中,文件名中的路径都与makefile的位置相关。所以例如Part2/part2code.o: ../Shared/helper.o不正确;它应该只是Part2/part2code.o: Shared/helper.o(依此类推)。另请注意,您已在makefile中编写Shared,但您已将目录列为shared ...

虽然实际上,这仍然是错误的。 a: b等规则表示ba先决条件;即,在你a之前,你不能b。对象文件不是这种情况;他们不相互依赖。通常,目标文件完全取决于其组成源文件(*.c*.h)。因此,例如,part2code.o的规则可能类似于:

Part2/part2code.o: Part2/part2code.c
    gcc -ansi -pedantic-errors -c -Wall -Werror -g -o $@ $^

(注意使用特殊变量$@$^,它们分别代替目标和先决条件。)