Windows等效于UNIX正则表达式


0

有替代品吗

**/*.*
**/*.cpp

这样我就可以做这样的事情:

gcc -std=c++14 -I ./include/ -o ./bin/main ./src/**/*.cpp

(不使用任何makefile时的方式)

在Windows上,我这样做:

gcc -std=c++14 -I include -o bin/main src/main.cpp src/Sth.cpp src/SthEl.cpp

因为正则表达式似乎不起作用,或者我无法找到使它们起作用的方法...

你能告诉我在Windows上怎么做吗?


2
首先,您没有使用正则表达式,而是使用了常规通配符。**不会是正则表达式,因为它是一个量词,并且对“任何数量的项目,任何数量的项目”进行量化没有任何意义。在Windows上,您可以使用src/*.cpp。您所缺少的是通配符,表示“每个目录中的每个cpp文件”。通常,您将为此使用脚本。在这种情况下,您可以使用PowerShell脚本来收集文件并构建一个字符串,您可以将该字符串用作GCC的参数。
赛斯

Naja indirekt ist auch * einregulärerAusdruck,da die Sprache die Genau Sigma * akzeptiert damit impliziert wird。
baxbear16年

如果您对该定义感到满意,那就很好。但是,如果您不能执行ls ./[a-Z]{4}/.*该操作,则不符合正则表达式的技术定义,并且**仍然会违反/废除技术系统中通常接受的正则表达式。另外,在我的ls示例中,您可能需要对第一个点进行转义以使其成为文字而不是任何字符。
赛斯

Answers:


0

根据何时可以使用绝对路径,可以使用以下PowerShell代码:

$files = (Get-ChildItem -Recurse -Path ./src *.cpp | %{echo $_.FullName}) -Join " "
gcc -std=c++14 -I include -o bin/main $files

您可能可以将其缩短为:

gcc -std=c++14 -I include -o bin/main ((Get-ChildItem -Recurse -Path ./src *.cpp | %{echo $_.FullName}) -Join " ")

这并不像您的Linux操作系统那样简短或可读,但是我可以想到最接近您想要的结果。

如果您src的层次结构平坦,则可以使用:

gcc -std=c++14 -I include -o bin/main src/*.cpp
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.