【发布时间】:2020-12-26 21:06:33
【问题描述】:
我最近开始学习 C++。我一直在 zsh shell 中使用 clang 来编译我的代码。 为此,我每次都使用相同的命令,所以我把它做成了一个 .zsh 文件来简化流程。
我文件中的代码是这样的:
clang++ $1 -std=c++17 -stdlib=libc++ -o $2
它适用于单个 .cpp 文件;即,如果我通过它file.cpp output,它会完全按照我的意愿工作。但是,如果我将多个文件传递给它,clang 会抱怨(它说路径无效)。
如果我输入以下内容,clang 会完全按照我的意愿进行操作,并将多个文件编译成一个名为“test”的 UNIX 可执行文件。
clang++ multiple.cpp add.cpp input.cpp -std=c++17 -stdlib=libc++ -o test
但是,如果我输入以下内容,它就会抱怨。我也尝试过转义空格,但没有成功。
zsh ../comp.zsh 'multiple.cpp add.cpp input.cpp' attempt
我不明白为什么这不起作用并且在其他地方找不到任何答案。我对zsh很陌生。
提前致谢!
【问题讨论】:
-
'multiple.cpp add.cpp input.cpp'因为这是引用的,所以它是一个包含空格字符的参数,而不是由空格分隔的多个参数。 -
我不是 zsh 用户,但我猜
multiple.cpp add.cpp input.cpp将作为单个命令行参数传递给 clang++? -
我建议你了解
make或类似的工具。 -
@G.M.正确的;默认情况下,
zsh不对不带引号的参数扩展执行分词,这与 POSIX 规范相反。
标签: zsh macos-big-sur