在单独的文件夹中编译对象,隐式规则不匹配
Compiling objects in a separate folder, implicit rule not matching
我正试图编译一个动态库,我需要将我的ofile存储在一个单独的文件夹中。
然后,我将使用一个隐式规则进行对象编译。然后,该规则从OBJDIR
宏开始。
这是Makefile:
ifndef LOGIN
LOGIN=login_x
endif
RM=rm -rvf
CC=gcc
CFLAGS=-std=c99 -Wall -Wextra -std=c99 -pedantic
LDFLAGS=-fpic
DEBUGFLAGS=-g3 -ggdb3
BUILD_DIR=bin
LIBS_DIR=$(BUILD_DIR)/lib
OBJDIR=$(LIBS_DIR)/$(LOGIN)
TARGET=$(LIBS_DIR)/lib$(LOGIN).so
ifdef LIBSRC_DIR
LIBSRC=$(shell echo $(LIBSRC_DIR)/*.c)
LIBOBJ=$(addprefix $(OBJDIR)/, $(LIBSRC:$(LIBSRC_DIR)/%.c=%.o))
endif
.PHONY: clean
all:
@echo "Nothing was done."
lib: $(LIBS_DIR) $(OBJDIR) $(LIBOBJ)
ifndef LIBSRC_DIR
@echo "Error making $(TARGET), LIBSRC_DIR (path to the source files) must be defined"
@false
endif
@echo $(OBJDIR)
$(CC) --shared -o $(TARGET) $(LIBOBJ)
$(OBJDIR)/%.o: $(LIBSRC)/%.c
$(CC) $(CFLAGS) $(LDFLAGS) $(DEBUGFLAGS) -c -o $(OBJDIR)/$(@:$(LIBSRC_DIR)/%=%) $(@:.o=.c)
$(OBJDIR):
mkdir -vp $(OBJDIR)
$(LIBS_DIR):
mkdir -vp $(LIBS_DIR)
clean:
$(RM) $(BUILD_DIR)/*
我得到:
make: *** No rule to make target 'bin/lib/login_x/array.o', needed by 'lib'. Stop.
无法理解为什么我的$(OBJDIR)/%.o: $(LIBSRC)/%.c
规则与bin/lib/login_x/array.o
不匹配。。。
基于定义事物的方式,
$(OBJDIR)/%.o: $(LIBSRC)/%.c
应该是
$(OBJDIR)/%.o: $(LIBSRC_DIR)/%.c
相关文章:
- Qt SQLite没有查询或参数计数不匹配
- 模板参数推导失败,函数参数/参数不匹配
- 在使用累加时,C++中的运算符+不匹配
- C++ 与操作员不匹配<<
- 在 Arduino 上使用 sscanf 会导致与 const char * 不匹配,并且返回值始终相同,尽管输入值不同
- 与'operator='不匹配(操作数类型'String'且"void")
- C++模板/别名 - 模板参数列表中参数 1 处的类型/值不匹配
- C4018:类内有符号、无符号不匹配
- 我在 .h 中有一个枚举类,并且在.cpp错误中有一个运算符重载:与"运算符<<不匹配
- 为什么我收到错误:"运算符<<不匹配?
- RE2 不匹配非 ASCII 字符
- 函数签名与调用的函数不匹配,常量字符[]和字符*之间的区别?
- 模板推导:为什么函数指针模板定义在常量和/或引用时不匹配?
- 错误:"模板<类_Tp,类_Dp>类 std::unique_ptr"的模板参数列表中参数 1 的类型/值不匹配
- OpenSSL fips in C++ wrapper Library 如何?错误:指纹不匹配
- 为什么我的数组值与此处的全局变量不匹配?
- 引号之间匹配/不匹配,带有不可避免的引号和多行
- 源外生成与目标文件的规则不匹配
- 为什么这个提升::精神::qi规则与输入不匹配
- 在单独的文件夹中编译对象,隐式规则不匹配