簡體   English   中英

Makefile 未對文件使用隱式規則

[英]Makefile doesn't use implicit rule on file

我只是想為一個小型 C++ 項目寫一個快速的 Makefile,但是當我嘗試構建時,make 說:

沒有規則使目標“obj/main.o”

即使我的隱含規則應該涵蓋該文件。 我見過其他人忘記了斜線什么的,但我沒有看到這個 Makefile 的問題:

.PHONY: run, clean

SRCDIR:=./src
OBJDIR:=./obj
BINDIR:=./bin

CC:=gcc
CXX:=g++

SRC:=$(shell find -name *.cpp)
HXX:=$(shell find -name *.hpp)
OBJ:=$(subst src/,obj/,$(SRC:%.cpp=%.o))
EXE:=main

CXXFLAGS:=-std=c++14 -Wall

$(EXE): $(OBJ)
    @echo $(OBJ)
    $(CXX) $(CXXFLAGS) $^ -o $(BINDIR)/$@

$(OBJDIR)/%.o: $(SRCDIR)/%.cpp $(SRCDIR)/%.hpp
    $(CXX) $(CXXFLAGS) -c $< -o $@

我在 Raspberry Pi 3 b 上使用 Raspberry Pi OS。

因為

$(OBJDIR)/%.o: $(SRCDIR)/%.cpp $(SRCDIR)/%.hpp

您只能編譯同時具有cpphpp的文件,但您的 main 沒有 header (例如,您有src/main.cpp但沒有src/main.hpp

例子:

pi@raspberrypi:/tmp/p $ find .
.
./bin
./src
./src/main.cpp
./Makefile
./obj
pi@raspberrypi:/tmp/p $ make
make: ***  Aucune règle pour fabriquer la cible « obj/main.o », nécessaire pour « main ». Arrêt.
pi@raspberrypi:/tmp/p $ touch src/main.hpp
pi@raspberrypi:/tmp/p $ make
g++ -std=c++14 -Wall -c src/main.cpp -o obj/main.o
./obj/main.o
g++ -std=c++14 -Wall obj/main.o -o ./bin/main
pi@raspberrypi:/tmp/p $ 

Aucune règle pour fabriquer la cible...表示沒有制定目標的規則


換行

$(OBJDIR)/%.o: $(SRCDIR)/%.cpp

編譯完成:

pi@raspberrypi:/tmp/p $ find .
.generally
./bin
./src
./src/main.cpp
./Makefile
./obj
pi@raspberrypi:/tmp/p $ make
g++ -std=c++14 -Wall -c src/main.cpp -o obj/main.o
./obj/main.o
g++ -std=c++14 -Wall obj/main.o -o ./bin/main
pi@raspberrypi:/tmp/p $ 

當源#include其他 header 文件經常出現時,將依賴項添加到 header 不足以在必要時重新編譯。

您可以查看makedepend ,將其安裝在 raspbian/debian/ubuntu 下: apt-get install xutils-dev


請注意,每次您執行時都會完成鏈接make

pi@raspberrypi:/tmp/p $ find .
.
./bin
./bin/main
./src
./src/main.hpp
./src/main.cpp
./Makefile
./obj
./obj/main.o
pi@raspberrypi:/tmp/p $ make
./obj/main.o
g++ -std=c++14 -Wall obj/main.o -o ./bin/main
pi@raspberrypi:/tmp/p $ make
./obj/main.o
g++ -std=c++14 -Wall obj/main.o -o ./bin/main
pi@raspberrypi:/tmp/p $ 

暫無
暫無

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

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