Makefile 未链接到一个子目录中的头文件之一
Makefile not linking to one of the header files in one sub-directory
我正在尝试编写具有以下目录结构的 Makefile -
示例 - 包含 Makefile、main.c、xyz.c、xyz.h 和子文件目录 Hal 和 Interrupt_Config
Hal - 包含 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
每当我尝试在不包含 Interrupt_Config/try.h 的情况下执行 make 时,它工作得非常好。我的 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[=53 中的任何地方使用 TRUE 或 FALSE 的值时=] 并再次尝试 make 。它抛出错误 - 'TRUE' undefined (first use in this function) and similar for '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
}
我只是重写了包括 Makefile 在内的所有文件,这次它可以正常工作,不确定是什么问题,因为一切似乎都很好。
我正在尝试编写具有以下目录结构的 Makefile -
示例 - 包含 Makefile、main.c、xyz.c、xyz.h 和子文件目录 Hal 和 Interrupt_Config
Hal - 包含 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
每当我尝试在不包含 Interrupt_Config/try.h 的情况下执行 make 时,它工作得非常好。我的 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[=53 中的任何地方使用 TRUE 或 FALSE 的值时=] 并再次尝试 make 。它抛出错误 - 'TRUE' undefined (first use in this function) and similar for '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
}
我只是重写了包括 Makefile 在内的所有文件,这次它可以正常工作,不确定是什么问题,因为一切似乎都很好。