$(patsubst PATTERN,REPLACEMENT,TEXT)
在 TEXT 中以空格分开的单词中,寻找 PATTERN,然后替换成 REPLACEMENT,然后返回替换后的单词。
-rm dir
加了-以后,如果这个命令失败,也不会终止所在行,而是继续往下走。下面的说明转自 https://blog.csdn.net/chen_chun_guang/article/details/44170985
-----------------------------------------------------------
#!/bin/bash
set -e
command 1
command 2
...
exit 0
----------------------------------------------------------
Every script you write should include set -e at the top. This tells bash that it should exit the script if any statement returns a non-true return value. The benefit of using -e is that it prevents errors snowballing into serious issues when they could have been caught earlier. Again, for readability you may want to use set -o errexit.
注意,在Makefile中使用 set -e 的话,其作用范围只有一行,所以要把它管辖范围内的后续命令都写在同一行,用分号隔开。当然,也可以用续航符\
。
这是雷哥介绍的,我除了sed那句没看懂,其他部分看懂了,其作用原理就是用编译器-MM
这个选项,生成每个cpp文件的依赖关系,然后用那句 sed 语句,将依赖关系转换为一批 Makefile 文件,然后 include 进来。这样,每次 make,都会根据源文件之间的实际依赖关系进行重新编译,而不是所有文件全部重新编译。
CC = g++
CC_FLAGS=-llapack -lblas -lgsl -lgslcblas -fopenmp -std=c++11 -g
CPP_SRC_FILES = $(shell find src/ -maxdepth 1 -name "*.cpp")
CPP_OBJ_FILES = $(patsubst %.cpp, %.o, $(CPP_SRC_FILES))
CPP_DPT_FILES = $(patsubst %.cpp, %.d, $(CPP_SRC_FILES))
EXCUTABLE = pvpc.x
$(EXCUTABLE): $(CPP_OBJ_FILES)
$(CC) $^ -o $@ $(CC_FLAGS)
%.o: %.cpp
$(CC) -c $< -o $@ $(CC_FLAGS)
%.d: %.cpp
@set -e; rm -f $@; $(CC) -MM $< > $@.$$$$.dtmp; sed ‘s,\(.*\)\.o\:,$*\.o $*\.d\:,g‘ < $@.$$$$.dtmp > $@; rm -f $@.$$$$.dtmp
-include $(CPP_DPT_FILES)
clean:
rm -f $(DST)
rm -f $(CPP_OBJ_FILES)
rm -f $(CPP_DPT_FILES)
rm -f $(shell find src/ -name "*.dtmp")
原文:https://www.cnblogs.com/luyi07/p/15005502.html