生成:没有创建头文件的规则

Make: No rule to make a header file?

本文关键字:文件 规则 创建 生成      更新时间:2023-10-16

我正在尝试使用名为BigInt的库制作一个项目。我的文件结构是:

/Users/wen/Projects/challenge/fibonacci3/fibonacci3.cpp
/Users/wen/Projects/challenge/fibonacci3/Makefile
/Users/wen/Projects/include/bigint/<.cc files and .hh files>
/Users/wen/Projects/include/bigint/Makefile

斐波那契3 Makefile截至

LD_FLAGS = 
CC_FLAGS = 
# Include libraries
include /Users/wen/Projects/include/bigint/Makefile
# Build object files
%.o: %.cc %.cpp $(library-cpp)
    g++ -c -o $@ $(CC_FLAGS)
# Link object files
fibonacci3: fibonacci3.o $(library-objects)
    g++ -o $@ $(LD_FLAGS)

和 bigint Makefile 是 截至 (缩短)

# Mention default target.
all:
# Implicit rule to compile C++ files.  Modify to your taste.
%.o: %.cc
    g++ -c -O2 -Wall -Wextra -pedantic $<
# Components of the library.
library-cpp = 
    BigUnsigned.cc 
    BigInteger.cc 
    BigIntegerAlgorithms.cc 
    BigUnsignedInABase.cc 
    BigIntegerUtils.cc 
library-objects = 
    BigUnsigned.o 
    BigInteger.o 
    BigIntegerAlgorithms.o 
    BigUnsignedInABase.o 
    BigIntegerUtils.o 
library-headers = 
    NumberlikeArray.hh 
    BigUnsigned.hh 
    BigInteger.hh 
    BigIntegerAlgorithms.hh 
    BigUnsignedInABase.hh 
    BigIntegerLibrary.hh 

但是,make报告找不到文件的规则?

make: *** No rule to make target `NumberlikeArray.hh', needed by `BigUnsigned.o'.  Stop.
[Finished in 0.0s with exit code 2]

这是怎么回事?标头应该包含在内,而不是编译,那么为什么要要求标头呢?

提前感谢!

溶液:

不要包含生成文件,而是在我自己的生成文件中编译源代码。成功了!再次感谢。

make程序要求所有文件都位于当前目录中。由于您将第二个生成文件包含在当前生成文件中,因此其中的所有文件也都相对于当前目录。您必须确保包含的生成文件中的文件包含正确的路径。

Make 在找不到依赖项时会给出此错误;然后它会尝试构建该依赖项,但不知道创建此头文件的规则。

您可能键入了错误的头文件的名称。