首页 > 解决方案 > 选择文件时 bash 脚本中的意外标记“(”附近出现语法错误 [扩展]

问题描述

与此处类似的问题,但对于我的用例,我想放在 makefile 中。

#!/bin/bash

# Example: 
#   make run TEST_CASE="testbench.sv"
#   make clean

compile:
    vcs $(TEST_CASE) -sverilog;

run: compile
    ./simv

uvm_compile:
    vcs $(TEST_CASE) -sverilog;

clean:
    shopt -s extglob;
    rm -v !(*.sv|*svh|"makefile");

make clean 中存在问题,我得到以下结果:

ycliao@localhost:[~/workspace/i2c_vip/uvm_practice]: make clean
shopt -s extglob;
rm -v !(*.sv|*svh|"makefile");
/bin/sh: -c: line 0: syntax error near unexpected token `('
/bin/sh: -c: line 0: `rm -v !(*.sv|*svh|"makefile");'
make: *** [clean] Error 1

标签: bashmakefile

解决方案


据我了解makefile,每一行都在一个单独的shell中执行。因此,您需要添加一个续行来连接命令,以便它们在同一个shell 中执行:

SHELL = /bin/bash

# ...

clean:
    shopt -s extglob; \
    rm -v !(*.sv|*svh|"makefile");

这在 wikipedia Make 页面上的Example makefiles中得到了演示。


推荐阅读