gpt4 book ai didi

c - Makefile 未链接到一个子目录中的头文件之一

转载 作者:太空宇宙 更新时间:2023-11-04 04:35:08 25 4
gpt4 key购买 nike

我正在尝试编写具有以下目录结构的 Makefile -

示例 - 包含Makefile、main.c、xyz.c、xyz.h 和子目录HalInterrupt_Config
Hal - 包含 test2.ctest2.hInterrupt_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 的任何地方使用 TRUEFALSE 的值并尝试做 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
}

最佳答案

我只是重写了包括 Makefile 在内的所有文件,这次它可以正常工作,不确定是什么问题,因为一切看起来都很好。

关于c - Makefile 未链接到一个子目录中的头文件之一,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31441013/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com