一般生成文件显示没有规则来生成目标错误
Generic makefile showing no rule to make target error
我编写了一个makefile来编译和链接项目中的所有文件。现在我只有两个cpp文件:src/main.cpp
和src/DBEngine/benchmark/ssb/ssb_main.cpp
。
我的makefile内容是:
CPP_FILES := $(wildcard src/*.cpp) $(wildcard src/DBEngine/benchmark/ssb/*.cpp)
OBJ_FILES := $(addprefix bin/obj/,$(notdir $(CPP_FILES:.cpp=.o)))
DEBUG_OBJ_FILES := $(addprefix bin/debug/,$(notdir $(CPP_FILES:.cpp=.o)))
CC_FLAGS := -I${PWD}
main.out: $(OBJ_FILES)
g++ -o $@ $(OBJ_FILES)
bin/obj/%.o: src/%.cpp
g++ -c -o $@ $< (CC_FLAGS) -w
但当我做一个make时,它会给出错误:
make:***没有使目标
bin/debug/ssb_main.o
成为main.out
所需的规则。停止
简短版本:对于DBEngine
中的对象文件,您的模式规则展开如下
bin/obj/ssb_main.o: src/ssb_main.cpp
我敢肯定,你可以看到这是行不通的。
你可以添加另一个模式规则来修复它
bin/obj/%.o: src/DBEngine/benchmark/ssb/%.cpp
g++ -c -o $@ $< $(CC_FLAGS) -w
然而,一个更简单的方法是镜像源代码并构建树,并使用vpath
,确保makefile目录中也有一个名为DBEngine/benchmark/ssb
的目录,并使用以下内容:
CPP_FILES := $(wildcard src/*.cpp) $(wildcard src/DBEngine/benchmark/ssb/*.cpp)
OBJ_FILES := $(CPP_FILES:src/%.cpp=%.o)
CPPFLAGS := -I${PWD}
CXXFLAGS := -w
vpath %.cpp src
main: $(OBJ_FILES)
内置规则将处理其余部分。
旁注:-I${PWD}
是多余的,而-w
通常是个坏主意。
在编译规则中,您已指定源文件位于"src"目录中。但从您的描述来看,ssb_main.cpp文件似乎位于"src/DBEngine/backment/ssb/"文件夹中,因此make找不到编译ssb_main.o的依赖项。
您可以使用变量VPATH来指定make应该在其中查找源文件的文件夹。
由于子文件夹是src文件夹,因此可以尝试使用
CPP_FILES := $(shell ls -pR ./src | grep -v /)
它将列出src下的所有cpp文件及其子文件夹(不包括)。和
相关文章:
- CMake 错误 - 目标 foo INTERFACE_SOURCES属性包含在源目录中以前缀为前缀的路径
- 错误:在 C++ 目标 c 混合'self'使用未声明的标识符
- CMake on FindOpenGL.cmake 中的错误,当使用导入的目标 OpenGL::GLU?
- 如何修复Clion中目标错误的配方?
- Cmake 错误:无法为目标指定链接库
- make:致命错误:目标命令失败
- 目标提升::<library>已经有导入的位置 + 链接错误
- 对类型的非常量左值引用 - 使用类类型的参数时,目标C++包装器中的错误
- CMAKE 目标链接打开 SSL 错误
- Eclipse:错误:初始化模式失败(无法连接到目标)
- 致命错误LNK1112:在 npm 安装期间,模块计算机类型'X86'与目标计算机类型'x64'冲突
- CMake 错误:无法确定目标的链接语言
- Python目标包装C++类的SWIG错误
- 为什么即使目标数组很小,strcpy 也不会抛出错误?
- 目标C++错误:预期的非限定 id
- 在 pybind11 和 C++ 中添加源时,没有给出目标错误
- 无法为目标错误 CMakeList 指定链接库
- 一般生成文件显示没有规则来生成目标错误
- 目标C错误:C风格的方法内部类实现
- make efile目标错误