[英]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.