如何删除 makefile 中的扩展名
How to remove extension in makefile
我有以下生成文件:
CC=gcc
CFLAGS=-c ---
LDFLAGS = ---
SRCFILES := $(shell find ../ -name '*.c')
OBJFILES := $(patsubst %.c,%.o,$(SRCFILES))
TESTFILE := $(patsubst %_test.c,%,$(SRCFILES))
all: $(TESTFILE)
$(TESTFILE): $(OBJFILES)
$(CC) $(LDFLAGS) $(OBJFILES) -o $@
all: $(OBJFILES)
%.o: %.c
$(CC) $(CFLAGS) $< -o $@
对于所有:$(OBJFILES) 及以下,工作得很好。它创建了我需要的所有目标文件,但是我在创建文件测试文件时遇到了问题。其中一个src文件是ABC_test.c,我要输出的文件是ABC_test(没有扩展名)
ABC_test 将具有所有 OBJ 文件的依赖项。我认为我的设置方式是正确的,但如果不正确,请告诉我。我对 makefile 很陌生。
我尝试使用替换,如您在 TESTFILE 名称中所见。我认为我的问题太具体了,无法通过 google 搜索找到帮助。知道我能做什么吗?
请务必了解 patsubst
不会从结果中遗漏单词。如果单词与模式匹配,则将其替换。如果单词与模式不匹配,那么它将按原样发出。
所以,如果您有:
FOO = foo_1 foo_2 bar_1 bar_2
$(info $(patsubst foo%,FOO%,$(FOO))
那么输出将是:
FOO_1 FOO_2 bar_1 bar_2
它不会像您预期的那样:
FOO_1 FOO_2
省略了不匹配的值。如果您想从输出中 删除 单词,您需要使用 filter
和 filter-out
函数。例如:
TESTFILE = $(patsubst %_file.c,%,$(filter %_test.c,$(SRCFILES)))
我有以下生成文件:
CC=gcc
CFLAGS=-c ---
LDFLAGS = ---
SRCFILES := $(shell find ../ -name '*.c')
OBJFILES := $(patsubst %.c,%.o,$(SRCFILES))
TESTFILE := $(patsubst %_test.c,%,$(SRCFILES))
all: $(TESTFILE)
$(TESTFILE): $(OBJFILES)
$(CC) $(LDFLAGS) $(OBJFILES) -o $@
all: $(OBJFILES)
%.o: %.c
$(CC) $(CFLAGS) $< -o $@
对于所有:$(OBJFILES) 及以下,工作得很好。它创建了我需要的所有目标文件,但是我在创建文件测试文件时遇到了问题。其中一个src文件是ABC_test.c,我要输出的文件是ABC_test(没有扩展名)
ABC_test 将具有所有 OBJ 文件的依赖项。我认为我的设置方式是正确的,但如果不正确,请告诉我。我对 makefile 很陌生。
我尝试使用替换,如您在 TESTFILE 名称中所见。我认为我的问题太具体了,无法通过 google 搜索找到帮助。知道我能做什么吗?
请务必了解 patsubst
不会从结果中遗漏单词。如果单词与模式匹配,则将其替换。如果单词与模式不匹配,那么它将按原样发出。
所以,如果您有:
FOO = foo_1 foo_2 bar_1 bar_2
$(info $(patsubst foo%,FOO%,$(FOO))
那么输出将是:
FOO_1 FOO_2 bar_1 bar_2
它不会像您预期的那样:
FOO_1 FOO_2
省略了不匹配的值。如果您想从输出中 删除 单词,您需要使用 filter
和 filter-out
函数。例如:
TESTFILE = $(patsubst %_file.c,%,$(filter %_test.c,$(SRCFILES)))