了解 makefile 中的“subst”关键字和特定行

Hod*_*929 5 makefile

我参加了一门 CPP 语言课程,我试图了解 makefile 中“subst”的使用(一般情况)以及该 makefile 中的具体用途。

我尝试用谷歌搜索“subst”的用法,但没有找到。

CXX=clang++-5.0
RM=rm -f
CPPFLAGS=-std=c++17 

ifndef MAIN
MAIN=./main.cpp
endif

MAINEXECUTABLE=$(subst .cpp,,$(MAIN)).exe

SOURCES=$(MAIN)

all: $(MAINEXECUTABLE)
    $(MAINEXECUTABLE)

$(MAINEXECUTABLE): $(SOURCES) $(HEADERS)
    $(CXX) $(CPPFLAGS) $(SOURCES) -o $(MAINEXECUTABLE)

clean:
    $(RM) *.exe a.out *.class *.ppm 
Run Code Online (Sandbox Code Playgroud)

该 makefile 是通用 makefile,可用于编译任何单个 cpp 文件。

Sto*_*ica 11

来自GNU make参考手册:

\n\n
\n
$(subst from,to,text)\n
Run Code Online (Sandbox Code Playgroud)\n\n

对文本text执行文本替换:每次出现的\n from都被替换为to。结果将替换函数调用。例如,

\n\n
$(subst ee,EE,feet on the street)\n
Run Code Online (Sandbox Code Playgroud)\n\n

将字符串 \xe2\x80\x98fEEt 替换为 strEEt\xe2\x80\x99。

\n
\n\n

将其应用到您的案例中,函数调用将查看主文件名并删除.cpp扩展名(通过用空字符串替换它)。然后,它将.exe扩展名添加到现在无扩展名的文件名中。

\n