EXCLUDE_FILES=$(shell find . test *.c |grep -vE "a.c|b.c")
上面的的 EXCLUDE_FILES 是 Makefile 中的一条语句,通过打印可知它的值是复合期望的。
为了便于扩展我把它改成了下面这样
EXCLUDE_SRCS=a.c EXCLUDE_SRCS+=b.c EXCLUDE_FILES=$(shell find . test *.c | grep -vE "$(EXCLUDE_SRCS)")
这样再打印 EXCLUDE_FILES 的值发现,EXCLUDE_SRCS 对应的文件并没有被过滤掉,也就是 grep -vE 后面的那一坨没有起作用。
请教大神,我该怎么改能达到期望的效果呢?
1
z0z OP 重新编辑一下。
EXCLUDE_FILES=$(shell find . test *.c |grep -vE "a.c|b.c") 上面的的 EXCLUDE_FILES 是 Makefile 中的一条语句,通过打印可知它的值是复合期望的。 为了便于扩展我把它改成了下面这样 EXCLUDE_SRCS=a.c EXCLUDE_SRCS+=b.c EXCLUDE_FILES=$(shell find . test *.c | grep -vE "$(EXCLUDE_SRCS)") 这样再打印 EXCLUDE_FILES 的值发现,EXCLUDE_SRCS 对应的文件并没有被过滤掉,也就是 grep -vE 后面的那一坨没有起作用。 请教大神,我该怎么改能达到期望的效果呢? |
2
eastlhu 2018-07-30 12:05:59 +08:00 via iPhone
加个转义符试试
|
3
z0z OP EXCLUDE_FILES=$(shell find . test *.c | grep -vE \"$(EXCLUDE_SRCS)\")
这样的也试过,仍然不起作用。 单引号,双引号,$$,也都试过了。 |
4
myth 2018-07-30 14:10:26 +08:00
grep -vE "$(EXCLUDE_SRCS)"
这里$(EXCLUDE_SRCS)是以空格间隔的文件列表,而 grep 的需要的是"|"间隔的表达式 可以考虑用 Makefile 的 $(filter-out <pattern...>;,<text>;) |
5
z0z OP @myth 你说的这个问题是一个值得注意的地方。
对不住大家,楼主位的 find 语句参数有笔误。 但是我按照下面的测试了,仍然没有起作用: EXCLUDE_SRCS=a.c EXCLUDE_FILES=$(shell find test *.c | grep -vE "$(EXCLUDE_SRCS)") |
7
huiyifyj 2018-07-30 16:07:29 +08:00 via Android
lz 有什么写 Makefile 的好教程么?最近正打算学,但是网上搜的都是杂七杂八的
|
8
waruqi 2018-07-30 16:53:28 +08:00
别用 makefile 啦,直接 xmake 多省事,添加并排除文件只需要:
target("test") set_kind("binary") add_files("src/*.c|a.c|b.c") |