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 后面的那一坨没有起作用。
请教大神,我该怎么改能达到期望的效果呢?
重新编辑一下。
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 后面的那一坨没有起作用。
请教大神,我该怎么改能达到期望的效果呢?
加个转义符试试
EXCLUDE_FILES=$(shell find . test *.c | grep -vE \"$(EXCLUDE_SRCS)\")
这样的也试过,仍然不起作用。
单引号,双引号,$$,也都试过了。
grep -vE "$(EXCLUDE_SRCS)"
这里$(EXCLUDE_SRCS)是以空格间隔的文件列表,而 grep 的需要的是"|"间隔的表达式
可以考虑用 Makefile 的 $(filter-out
;,;)
你说的这个问题是一个值得注意的地方。
对不住大家,楼主位的 find 语句参数有笔误。
但是我按照下面的测试了,仍然没有起作用:
EXCLUDE_SRCS=a.c
EXCLUDE_FILES=$(shell find test *.c | grep -vE "$(EXCLUDE_SRCS)")
@z0z
==,我错了,刚才测试有错误。稍后公布结果
lz 有什么写 Makefile 的好教程么?最近正打算学,但是网上搜的都是杂七杂八的
别用 makefile 啦,直接 xmake 多省事,添加并排除文件只需要:
target("test")
set_kind("binary")
add_files("src/*.c|a.c|b.c")
《跟我一起学 Makefile.pdf 》
这个是挺省事的,但是有些基本的用法需要了解掌握的,我还不熟练,得好好学学。多谢推荐,等过一段时间开始去了解 xmake