该命令$ make all会产生错误,rm: cannot remove '.lambda': No such file or directory因此它会停止.我希望它忽略rm-not-found-errors.我怎么强迫?
Makefile文件
all:
make clean
make .lambda
make .lambda_t
make .activity
make .activity_t_lambda
clean:
rm .lambda .lambda_t .activity .activity_t_lambda
.lambda:
awk '{printf "%.4f \n", log(2)/log(2.71828183)/$$1}' t_year > .lambda
.lambda_t:
paste .lambda t_year > .lambda_t
.activity:
awk '{printf "%.4f \n", $$1*2.71828183^(-$$1*$$2)}' .lambda_t > .activity
.activity_t_lambda:
paste .activity t_year .lambda | sed -e 's@\t@\t\&\t@g' -e 's@$$@\t\\\\@g' | tee > .activity_t_lambda > ../RESULTS/currentActivity.tex
Run Code Online (Sandbox Code Playgroud) 如何从命令行传递参数到Makefile?
我明白我能做到
$ make action VAR="value"
$ value
Run Code Online (Sandbox Code Playgroud)
同 Makefile
VAR = "default"
action:
@echo $(VAR)
Run Code Online (Sandbox Code Playgroud)
我如何获得以下行为?
$ make action value
value
Run Code Online (Sandbox Code Playgroud)
?
怎么样
$make action value1 value2
value1 value2
Run Code Online (Sandbox Code Playgroud) 如何获取GNU的调用目标make Makefile?
例如,我make使用以下命令行调用:
make a-target
Run Code Online (Sandbox Code Playgroud)
如何在Makefile中获取调用目标"a-target"并将其分配给变量?
此外,如果在命令行上指定了多个目标:
make target1 target2 ...
Run Code Online (Sandbox Code Playgroud)
我如何获得所有这些?
我正在使用Makefiles.
但是,在执行任何目标之前,我需要执行一个命令(zsh脚本).我该怎么做呢?
谢谢!
如何在makefile中获取makefile的名称?
谢谢.
注意:
我需要那个,因为我希望我的makefile自己调用,但makefile不是Makefile,所以我想写这样的东西:
target:
($MAKE) -f ($MAKEFILENAME) other_target
Run Code Online (Sandbox Code Playgroud) 我正在写一个简短的shell脚本,它调用'make all'.这不是关键,但有没有办法可以压制这样的信息:如果是这样的话,"没有什么可以为所有人做的"?我希望找到一个make的标志来抑制它(不确定是否有),但是额外的一行或两行代码也可以.
仅供我使用bash.
编辑:为了更清楚,我只想宣传那些无所事事的消息.否则,我想显示输出.
我使用由外部工具(Netbeans)生成的Makefile,我无法更改主目标的逻辑,但我能够在实际构建之前执行的目标中"注入"逻辑(.build-pre)在Netbeans生成的Makefile中具体说明)
我希望该目标有条件地终止make执行,但不会引发错误.如果我做
exit
Run Code Online (Sandbox Code Playgroud)
在"预"规则中,没有任何反应(我的意思是,规则终止,但继续).如果我加
exit 1
Run Code Online (Sandbox Code Playgroud)
make将终止,但它将返回错误状态.
有没有办法强制make以干净的方式退出?我搜索了make函数,但发现只有error/warn/info,但没有像exit一样.
提前致谢!
编辑:基于评论似乎不可能.可怜.
为了完整性,我想要实现的更具体的例子:
default: pre
@echo "Doing default"
pre:
@echo "Doing pre"
ifeq "$(SOME_VARIABLE)" "yes"
exit 0
fi
Run Code Online (Sandbox Code Playgroud)
使用上面的Makefile,我希望能够执行pre,并有条件地阻止'default'执行,但仍然返回0到shell.
我有一个创建目录的规则
bin:
-mkdir $@
Run Code Online (Sandbox Code Playgroud)
但是,在第一次生成目录后,我收到此输出:
mkdir bin
mkdir: cannot create directory `bin': File exists
make: [bin] Error 1 (ignored)
Run Code Online (Sandbox Code Playgroud)
是否有某些方法我只能在目录不存在时运行规则,或者在目录已存在时禁止输出?
考虑一个makefile有很多目标的长目标,所有目标都是PHONY(这意味着目标名称不代表现有文件)。
我可以:
.PHONY: a
a:
do someting a
.PHONY: b
b:
do someting b
.PHONY: c
c:
do someting c
Run Code Online (Sandbox Code Playgroud)
要么:
.PHONY: a b c
a:
do someting a
b:
do someting b
c:
do someting c
Run Code Online (Sandbox Code Playgroud)
第一种选择很麻烦,第二种选择容易出错,因为将来我添加一个目标却忘记将其声明为PHONY。
有没有一种标准的方法来声明makefileas中的所有目标PHONY?
我实现了一个配方,以便将所有剩余的字符串传递给命令,例如在此脚本中:
Makefile
run:
# ./bin/run.sh $(filter-out $@,$(MAKECMDGOALS))
@echo $(filter-out $@,$(MAKECMDGOALS))
Run Code Online (Sandbox Code Playgroud)
但是,当我作为例子跑:
>make run my custom input params
my custom input params
make: *** No rule to make target `my'. Stop.
Run Code Online (Sandbox Code Playgroud)
makefile尝试执行剩余的字符串,所以错误:
Run Code Online (Sandbox Code Playgroud)make: *** No rule to make target `my'. Stop.
我怎么能阻止这个?
注意:作为解决方法,我定义了一个虚拟配方:
%:
@echo
Run Code Online (Sandbox Code Playgroud)
所以这将打印一个空字符串而不是错误.
我想避免做类似的事情:
make run-example param="my custom param"
Run Code Online (Sandbox Code Playgroud) makefile ×10
gnu-make ×2
shell ×2
arguments ×1
bash ×1
command-line ×1
gnu ×1
netbeans ×1
parameters ×1
phony-target ×1
target ×1