生成文件不对文件使用隐式规则
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 $@
我在我的树莓派3 b.上使用树莓派操作系统
因为
$(OBJDIR)/%.o: $(SRCDIR)/%.cpp $(SRCDIR)/%.hpp
您只能编译同时具有一个cpp和一个hpp的文件,但您的main没有头(例如,您有一个
示例:
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
其他头文件(通常是这种情况(时,向头添加依赖项是不足以在必要时重新编译的。
您可以查看makedependent,将其安装在raspbian/debian/ubuntu:apt-get install xutils-dev
下
请注意,每次进行制作:时都会完成链接
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 $
相关文章:
- 生成文件不对文件使用隐式规则
- 制作文件:没有规则来制定目标:如何设置正确的规则?
- 生成文件中隐式规则中的 -c 标志出错
- C++ 如何将两个 makefile 对象目标规则(位于另一个文件夹中)合并到一个目标/规则中?
- 生成文件匹配规则和配方中的模式
- 如何在 c c ++ 混合生成文件中为 c 对象添加附加规则?
- 无法通过 bazel 的规则成功包含外部头文件cc_library
- 在不应该应用生成文件规则时应用
- 生成文件:没有规则的依赖项不会使父项无效
- 生成文件:子目录的模式规则
- Visual Studio 2017 加载规则集文件时出错
- 在makefile中更改构建规则以构建多种文件类型
- 源外生成与目标文件的规则不匹配
- 生成:没有创建头文件的规则
- 生成文件失败,错误没有规则来设定目标
- 将 Icon 添加到可执行文件 (Eclipse CDT Luna) 时出现问题:make: *** 没有规则来制作目标 'resources.o'
- GNU 生成文件规则和依赖关系
- C++:同名的文件范围常量违反了一个定义规则
- 我如何理解这个生成文件规则的细节
- Solaris Imakefile复制文件规则