我有一个目录,下面有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.
帮助?
谢谢!
答案 0 :(得分:2)
在此上下文中,文件名中的路径都与makefile的位置相关。所以例如Part2/part2code.o: ../Shared/helper.o
不正确;它应该只是Part2/part2code.o: Shared/helper.o
(依此类推)。另请注意,您已在makefile中编写Shared
,但您已将目录列为shared
...
虽然实际上,这仍然是错误的。 a: b
等规则表示b
是a
的先决条件;即,在你a
之前,你不能b
。对象文件不是这种情况;他们不相互依赖。通常,目标文件完全取决于其组成源文件(*.c
和*.h
)。因此,例如,part2code.o
的规则可能类似于:
Part2/part2code.o: Part2/part2code.c
gcc -ansi -pedantic-errors -c -Wall -Werror -g -o $@ $^
(注意使用特殊变量$@
和$^
,它们分别代替目标和先决条件。)