使用一些排列的文件夹为项目编写makefile

时间:2012-02-28 16:53:05

标签: linux makefile

我有下面的makefile和目录树:

- > project / src / main.c,func.c, 生成文件

- >项目/ EXE /

- >项目/ INC /

- >项目/ OBJ /

  cc=gcc
    cflags=-c
    obj=../obj
    exe=../exe
    inc=../inc
    prog.exe: main.o func.o
        $(cc) main.o func.o -o $(exe)/prog.exe
    main.o: main.c $(inc)/defs.h
        $(cc) $(cflags) main.c
        mv main.o $(obj)/
    func.o: func.c $(inc)/defs.h
        $(cc) $(cflags) func.c
        mv func.o $(obj)/

问题是,main.o和func.o(以mv开头)下面的第二个动作不起作用(即main.o没有移动到/ obj目录)。 makefile或其他任何语法都有问题吗?

2 个答案:

答案 0 :(得分:1)

一个明显的问题是makefile没有构建它应该构建的目标。即:

prog.exe: main.o func.o
    $(cc) main.o func.o -o $(exe)/prog.exe

不构建prog.exe,而是构建$(exe)/prog.exe,这是一个不同的文件。修复将是:

$(exe)/prog.exe: $(obj)/main.o $(obj)/func.o
    $(cc) $^ -o $@

首选使用automatic variables作为输入和输出文件的名称,以避免重复和愚蠢的拼写错误。

答案 1 :(得分:0)

你可以用make来处理缩进。它需要真正的标签。

请参阅https://superuser.com/questions/224434/what-is-the-character-used-to-indent-the-make-file-rule-recipe