Makefile没有链接到一个子目录

时间:2015-07-15 21:01:38

标签: c makefile gnu-make

我正在尝试使用以下目录结构编写Makefile -

示例 - 包含 Makefile ,main.c,xyz.c,xyz.h和子目录 Hal Interrupt_Config
哈尔 - 包含 test2.c test2.h Interrupt_Config - 包含 try.h

以下是我正在使用的Makefile-

EXE    := practice
CC     := gcc
CPPFLAGS := -IHal -IInterrupt_Config
VPATH  := Hal:Interrupt_Config

MAIN_OBS  := $(patsubst %.c,%.o,$(wildcard *.c))
INT_OBS  := $(patsubst %.c,%.o,$(wildcard Interrupt_Config/*.c))
HAL_OBS  := $(patsubst %.c,%.o,$(wildcard Hal/*.c))
ALL_DEPS := $(patsubst %.o,%.d,$(MAIN_OBS), $(HAL_OBS), $(INT_OBS))

all: $(EXE)

$(EXE): $(MAIN_OBS) $(HAL_OBS) $(INT_OBS)
    $(CC) -o $@ $(LDFLAGS) $^ $(LDLIBS)

%.o: %.c 
    $(CC) -o $@ -MD -MP $(CPPFLAGS) $(CFLAGS) -c $<

-include $(ALL_DEPS)

clean:
     rm -f $(EXE) $(MAIN_OBS) $(INT_OBS) $(HAL_OBS) $(ALL_DEPS)

.PHONY: all clean

每当我尝试 make 而不包括Interrupt_Config / try.h时,它就可以正常工作。我的 main.c 包括这样 -

..
#include "test2.h"
#include "xyz.h"
#include "try.h" // Problem is here
..

try.h 非常简单 -

#ifndef TRY_H
#define TRY_H

#define TRUE 1
#define FALSE 0

#endif

但是当我在 main.c 中的任何地方使用 TRUE FALSE 的值时,尝试执行 make 再次。它抛出了我的错误 - 'TRUE'未定义(首次在此函数中使用)和类似的'FALSE'。

我无法理解究竟是什么问题,因为我是Makefiles的新手。

修改

main.c中

#include <stdio.h>
#include <stdlib.h>
#include "test2.h"
#include "try.h"
#include "xyz.h"

int main()
{
    bugs(); //test2.h
    bunny(); //test2.h
    t_print(); // xyz.h
    printf("Yes! your age is %d\n",TRUE); // try.h
}

1 个答案:

答案 0 :(得分:0)

我刚刚重写了包括Makefile在内的每个文件,这次都有用,不确定是什么问题,因为一切似乎都没问题。