V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
Distributions
Ubuntu
Fedora
CentOS
中文资源站
网易开源镜像站
z0z
V2EX  ›  Linux

请教一下, Makefile 中怎么保留字符串中的引号呢?

  •  
  •   z0z · 2018-07-30 11:54:00 +08:00 · 3503 次点击
    这是一个创建于 2342 天前的主题,其中的信息可能已经有所发展或是发生改变。

    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 后面的那一坨没有起作用。

    请教大神,我该怎么改能达到期望的效果呢?

    9 条回复    2018-07-30 17:55:02 +08:00
    z0z
        1
    z0z  
    OP
       2018-07-30 11:54:46 +08:00
    重新编辑一下。

    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 后面的那一坨没有起作用。

    请教大神,我该怎么改能达到期望的效果呢?
    eastlhu
        2
    eastlhu  
       2018-07-30 12:05:59 +08:00 via iPhone
    加个转义符试试
    z0z
        3
    z0z  
    OP
       2018-07-30 12:23:28 +08:00
    EXCLUDE_FILES=$(shell find . test *.c | grep -vE \"$(EXCLUDE_SRCS)\")

    这样的也试过,仍然不起作用。

    单引号,双引号,$$,也都试过了。
    myth
        4
    myth  
       2018-07-30 14:10:26 +08:00
    grep -vE "$(EXCLUDE_SRCS)"
    这里$(EXCLUDE_SRCS)是以空格间隔的文件列表,而 grep 的需要的是"|"间隔的表达式

    可以考虑用 Makefile 的 $(filter-out <pattern...>;,<text>;)
    z0z
        5
    z0z  
    OP
       2018-07-30 15:48:25 +08:00
    @myth 你说的这个问题是一个值得注意的地方。

    对不住大家,楼主位的 find 语句参数有笔误。

    但是我按照下面的测试了,仍然没有起作用:
    EXCLUDE_SRCS=a.c

    EXCLUDE_FILES=$(shell find test *.c | grep -vE "$(EXCLUDE_SRCS)")
    z0z
        6
    z0z  
    OP
       2018-07-30 15:55:05 +08:00
    @myth
    @z0z
    ==,我错了,刚才测试有错误。稍后公布结果
    huiyifyj
        7
    huiyifyj  
       2018-07-30 16:07:29 +08:00 via Android
    lz 有什么写 Makefile 的好教程么?最近正打算学,但是网上搜的都是杂七杂八的
    waruqi
        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")
    z0z
        9
    z0z  
    OP
       2018-07-30 17:55:02 +08:00
    @huiyifyj 《跟我一起学 Makefile.pdf 》
    @waruqi 这个是挺省事的,但是有些基本的用法需要了解掌握的,我还不熟练,得好好学学。多谢推荐,等过一段时间开始去了解 xmake
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   5369 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 29ms · UTC 07:30 · PVG 15:30 · LAX 23:30 · JFK 02:30
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.