【问题标题】:How to search header file and create missing directory in makefile [duplicate]如何在makefile中搜索头文件并创建缺少的目录[重复]
【发布时间】:2018-12-18 23:49:39
【问题描述】:

在我的项目中,我有目录结构/libs/src。我想创建makefile,其中main 依赖于/libs。 IE。头文件在/libs。我使用了以下

#Compiler to use
CC=gcc
#Compiler flags to use
CFLAGS=-c -Wall

BUILD = ./build
SRC = ./src
LIBS = ./libs

SOURCES = $(SRC)/main.c $(SRC)/SmallComponent1.c $(SRC)/SmallComponent2.c $(LIBS)/ExtLib.c
OBJECTS = $(SOURCES: .c=.o)
EXECUTABLE = $(BUILD)/appl.exe
all: $(OBJECTS) $(EXECUTABLE)

$(BUILD):
    mkdir $(BUILD)

$(EXECUTABLE) : $(OBJECTS)
    $(CC) $(OBJECTS) -o $@ 
.c.o: 
    $(CC) $(CFLAGS) -I$(LIBS) $< -o $@





phony: clean
clean:
    rm $(BUILD)/*.o $(BUILD)/appl.exe

问题是:如果不存在/build,我该如何创建?以及如何在$(CC) $(CFLAGS) -I$(LIBS) $&lt; -o $@ 中包含外部.h,因为-I$(LIBS) 不起作用,我收到以下错误./src/main.c:4:20: fatal error: ExtLib.h: No such file or directory

【问题讨论】:

  • 我无法重现您的错误。您使用的是哪个版本的 Make?

标签: makefile gnu


【解决方案1】:

要在需要之前创建构建目录,请使用order-only prerequisite (OOP) 并使用mkdir-p 选项以避免在它已经存在的情况下出现错误(由于 OOP,它不应该被需要但在 Makefiles 中使用这个选项总是更好):

$(BUILD):
    mkdir -p $@

$(EXECUTABLE) : $(OBJECTS) | $(BUILD)
    $(CC) $(OBJECTS) -o $@

对于您的其他问题,我们需要更多信息;正如你所描述的那样,它是不可复制的。尝试提供MCVE

【讨论】:

  • 非常感谢您的帮助
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-11-09
  • 2012-11-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-10-27
  • 1970-01-01
相关资源
最近更新 更多