簡體   English   中英

沒有規則在 GCC Makefile 中制作目標

[英]No rule to make target in GCC Makefile

這是有問題的以下 Makefile:

#
# Compiler flags
#
CC     = gcc
CFLAGS = -Wall -Werror -Wextra 

#
# Project files
# example - 
# SRCS = hash_table.c linked_list.c utils.c common.c business_logic.c user_interface.c
# SRCS = test/gc_test.c src/gc.c
SRCS := $(shell find . -name "*")
OBJS = $(SRCS:.c=.o)
EXE  = output.out

FILENAMES := $(shell find . -type f -name "*.c" -printf "%f\n")
FILENAMES_OUT = $(FILENAMES:.c=.o)
#
# Default build settings
#
BUILDDIR = build
BUILDCFLAGS = -g -O0
BUILDEXE = $(BUILDDIR)/$(EXE)
BUILDOBJS = $(addprefix $(BUILDDIR)/, $(FILENAMES_OUT))


# Rules for default build
all: clean build

build: $(BUILDEXE)

$(BUILDEXE): $(BUILDOBJS)
    $(CC) $(CFLAGS) $(BUILDCFLAGS) -o $(BUILDEXE) $^ -lcunit

$(BUILDDIR)/%.o: %.c
    $(CC) $(CFLAGS) $(BUILDCFLAGS) -c $< -o $@


memtest: $(BUILDEXE) 
    valgrind --leak-check=full ./$<


#
# Other rules
#
clean:
    mkdir -p $(BUILDDIR)

問題-> make: *** No rule to make target `build/gc_test.o', needed by `build/output.out'. Stop. make: *** No rule to make target `build/gc_test.o', needed by `build/output.out'. Stop.

項目樹

.
├── build
├── doc
│   └── design.md
├── Makefile
├── proj
│   ├── code_quality_report.md
│   ├── deviations.md
│   ├── individual_reflection.md
│   ├── team_reflection.md
│   └── test_report.md
├── README.md
├── src
│   ├── gc.c
│   └── headers
│       └── gc.h
└── tests
    └── gc_test.c

問題本身發生在$(BUILDEXE): $(BUILDOBJS)中,其中依賴項是gc_test.c gc.c 這些依賴項應該被捕獲在它下面的 function 中,因為它的輸入是build目錄中的所有.c 文件。 這些文件應該得到正確匹配,然后編譯為 .o 文件,然后應該爬上樹並生成可執行文件。 我很困惑,因為$(BUILDOBJS)應該與$(BUILDDIR)/%.o相同。

我是制作 Makefile 的新手,但我想做得更好。 請指出更好的命名約定或術語可以更好地用於這篇文章。 謝謝!

問題在這里:

FILENAMES := $(shell find . -type f -name "*.c" -printf "%f\n")

這是錯誤的,因為-printf "%f\n"打印文件名,沒有任何路徑。 您丟失了有關找到文件的路徑的所有信息,那么如何才能找到它們呢?

您應該將其更改為簡單的-print然后它將起作用。

暫無
暫無

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

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