c - 创建更通用的 makefile
问题描述
我有以下生成文件:
CC=gcc
CFLAGS= ---
LDFLAGS = ---
all: abc_test
abc_test: abc_test.o defn_abc.o abc.o cmocka_compass.o
$(CC) $(LDFLAGS) abc_test.o defn_abc.o abc.o cmocka_compass.o -o
abc_test
abc_test.o : abc_test.c
$(CC) $(CFLAGS) abc_test.c
defn_abc.o : ../defn_abc.c
$(CC) $(CFLAGS) ../defn_abc.c
abc.o : ../abc.c
$(CC) $(CFLAGS) ../abc.c
knownfile.o : ../../../../../knownpath.c
$(CC) $(CFLAGS) ../../../../../knownpath.c
clean:
rm *o *.log abc_test
哪个会起作用(更改了一些文件名),但我想让它通用。我尝试了以下方法,但我不断收到没有目标的错误。
CC=gcc
CFLAGS= ---
LDFLAGS = ---
SRCFILES := $(shell find ../ -name '*.c')
OBJFILES := $(patsubst %.c,%.o,%(SRCFILES))
OBJFILES: all
all: $(OBJFILES)
%.o: %.c
$(CC) $(CFLAGS) %< -o %@
knownfile.o : knownpath.c
$(CC) $(CFLAGS) knownpath.c
make 文件是一个测试文件夹,其中包含所有测试代码(abs_test.c)。这也是所有对象应该去的地方。上一个目录包含 c 文件 defn_abc.c 和 abc.c。
知道我做错了什么吗?
更新:这是我最新的生成文件,错误“缺少分隔符”
CC=gcc
CFLAGS=-c -Wall -DUNIT_TESTING -DSYS_LINUX -Ipath1 -Ipath2
LDFLAGS = -Wl,---
SRCFILES := $(shell find ../ -name '*.c')
OBJFILES := $(patsubst %.c,%.o,$(SRCFILES))
all: $(PROG)
$(PROG): $(OBJFILES)
$(CC) $(CFLAGS) $(OBJFILES) -o $@ $(LDFLAGS)
all: $(OBJFILES)
%.o: %.c
$(CC) $(CFLAGS) %< -o %@
knownfile.o : knownpath.c
$(CC) $(CFLAGS) knownfile.c
解决方案
这条线没有做你认为它做的事情:
OBJFILES: all
或者至少我是这么认为的,因为虽然它大多是无害的,但它也是无用的。它声明名为“OBJFILES”的目标依赖于目标“all”。它也恰好是文件中的第一个目标,所以它是默认目标,但是因为 'all' 是它的先决条件,它会导致默认重建 'all' 目标。如果您完全省略该行,这正是会发生的情况。还要注意,这与变量 无关$(OBJFILES)
。
您的主要问题似乎是您对大多数变量引用使用了错误的语法。具有多字符名称的变量的值是通过$(VAR)
or ${VAR}
, not %(var)
形式的表达式获得的。单字符名称可以省略括号/大括号。我建议你更喜欢带括号的形式而不是带花括号的形式,尤其是在食谱中的命令中,因为后者很容易与 shell 语法混淆。
推荐阅读
- package - APT,基本操作系统
- ruby-on-rails - 很难将 ruby 3.0.2 设置为默认版本(您的 Ruby 版本是 2.6.6,但您的 Gemfile 指定了 3.0.2)
- lifetime - Vulkan delete pipeline after recording command buffer
- python - Trying to install pyramid-arima in a Jupyter Notebook and getting some errors
- react-native - Unable to play videos on react-native-macos
- javascript - Invite tracker bot that finds the inviter
- npm-scripts - Package Jason file issue
- wordpress - GTM:当类包含 div 而不是可点击元素(Elementor)时,点击跟踪
- r - How can I implement the length function for S4 classes?
- java - How to insert a collection of pojo objects in DynamoDB