有些文件具有相同的基本名称但扩展名不同。例如:
foo.ex1
foo.ex2
foo.txt
在对每个依赖文件进行一些操作之后,需要从 Makefile 中获取基本名称类似于目标但扩展名类似于依赖文件的文件。例如:
foo.bar.ex1
foo.bar.ex1
foo.bar.txt
通过 MSFT,nmake.exe
这一切可以简单、轻松地完成。
例如,使用 shell 命令:
foo.bar.txt : foo.???
! @<<tmp.bat
for /F "usebackq" %%G in (`dir /b $?`) do (
for /F "usebackq delims=" %%H in (`type %%G ^|findstr /bvl "Remove me gently"`) \
do (1>>$(@B)%%~xG echo %%H)
)
<<
或者在 PowerShell 中这样:
PS = PowerShell.exe
PSFLAGS = -NoLogo -NoProfile -Command
foo.bar.txt : foo.???
! @$(PS) $(PSFLAGS) $$ext=(Get-Item $?).Extension; (Get-Content $?) -notmatch 'Remove me gently' \
^| Out-File $(@B)$$ext
一般来说,在这两种情况下,输出都是以下文件:
foo.bar.ex1
foo.bar.ex2
foo.bar.txt
也就是说,您需要对每个依赖文件执行一些操作,并将结果保存到一个新文件中。新文件的名称由目标的基本名称(即本例中为 foo.bar)和当前正在执行操作的依赖文件的扩展名组成。
请告诉我,GNU 中有类似的东西吗make
?