簡體   English   中英

Makefile 不檢測規則

[英]Makefile doesn't detect rules

對於我的項目,嘗試創建一個 makefile 來編譯我的項目,但這是我第一次擁有一個文件夾樹。 我想編譯:

makefile
main.c
src
   folder1
      code1.c
      code2.c
   folder2
      code3.c
      code4.c
   folder3
      code5.c
      code6.c
obj
   folder1
      code1.o
      code2.o
   folder2
      code3.o
      code4.o
   folder3
      code5.o
      code6.o

我的makefile就像

CFLAGS=-Wall -lncursesw -lm -lpthread
CC=gcc 
OBJS=obj
EXE=SimulateurCompile
INCLUDE=AllInclude.h

SRC_FOLDER:=$(wildcard src/*)
SRC_FOLDER:=$(SRC_FOLDER:src/%=obj/%)

SRC=$(wildcard src/*/*.c) main.c
OBJS = $(patsubst %.c, %.o, $(SRC))
OBJS:=$(OBJS:src/%=obj/%)


%.o: %.c
    @echo "PASSAGE"
    ACompiler:=$($<:$(OBJS)%=src%)
    @echo $(ACompiler)
    @mkdir -p $(SRC_FOLDER)
    $(CC) -o $@ -c -g $(ACompiler) $(CFLAGS)

all:$(OBJS)
    gcc  $(SRC) -c -g -o $(OBJS) $(CFLAGS)
    @echo "Passage dans all\n"
    gcc -o $(EXE) $(OBJS) $(CFLAGS) -I $(INCLUDE)

但是 makefile 沒有檢測到 create .o 的規則有人知道為什么以及如何為我的文件樹創建 makefile 嗎?

對不起我的英語感謝閱讀我:D

我想你想要這樣的東西:

SRCS:=$(wildcard src/*/*.c)
OBJS:=$(patsubst src/%.c,obj/%.o,$(ALL_SRCS))

# Dump the above to make sure there weren't any errors so far:
$(info SRCS = $(SRCS))
$(info OBJS = $(OBJS))
$(info INCLUDES = $(INCLUDES))


obj/%.o : src/%.c $(INCLUDES)
        @echo "building $< -> $@"
        mkdir -p $(dir $@)
        $(CC) -o $@ -c -g $< $(CFLAGS) $(patsubst %,-I %,$(dir $(INCLUDES)))

all:$(OBJS)
        @echo "building $@"
        $(CC) -o $(EXE) $(OBJS) $(CFLAGS)

我不確定在你的例子中你想用ACompiler做什么,但它不起作用——你不能在一個配方行中設置一個變量,然后在下一個讀取它(加上你正在使用:=分配不合法的 bash 語法的變量)。 我認為您正在嘗試找出$(dir $<) -- 源文件的目錄。

GNU Make 具有從 .c 構建 .o 和從目標文件構建可執行文件的內置方法。 這一行足以做你想做的大部分事情:

SimulateurCompile: $(patsubst %.c, %.o, $(wildcard src/*/*))

這會將 .o 文件放在源文件旁邊。 我會盡快推薦使用 Make 以外的東西,而不是弄亂對象文件夾,比如 Meson 或 SCons。

內置配方使用您可以設置的變量,如 CFLAGS 和 CPPFLAGS。 有關內置配方的詳細信息,請參閱文檔。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM