相关疑难解决方法(0)

Make:命令失败后如何继续?

该命令$ 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

126
推荐指数
5
解决办法
8万
查看次数

如何从命令行传递参数到Makefile?

如何从命令行传递参数到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)

parameters command-line arguments makefile

99
推荐指数
5
解决办法
12万
查看次数

如何获取makefile的调用目标?

如何获取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)

我如何获得所有这些?

gnu makefile gnu-make

40
推荐指数
2
解决办法
2万
查看次数

强制Makefile在构建目标之前执行脚本

我正在使用Makefiles.

但是,在执行任何目标之前,我需要执行一个命令(zsh脚本).我该怎么做呢?

谢谢!

makefile target

22
推荐指数
3
解决办法
2万
查看次数

从makefile获取makefile的名称

如何在makefile中获取makefile的名称?

谢谢.

注意:

我需要那个,因为我希望我的makefile自己调用,但makefile不是Makefile,所以我想写这样的东西:

target:
    ($MAKE) -f ($MAKEFILENAME) other_target
Run Code Online (Sandbox Code Playgroud)

makefile

21
推荐指数
3
解决办法
1万
查看次数

抑制"没有为'所有'做的事"

我正在写一个简短的shell脚本,它调用'make all'.这不是关键,但有没有办法可以压制这样的信息:如果是这样的话,"没有什么可以为所有人做的"?我希望找到一个make的标志来抑制它(不确定是否有),但是额外的一行或两行代码也可以.

仅供我使用bash.

编辑:为了更清楚,我只想宣传那些无所事事的消息.否则,我想显示输出.

shell makefile

17
推荐指数
2
解决办法
5369
查看次数

强制退出Makefile目标而不引发错误

我使用由外部工具(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.

netbeans makefile

17
推荐指数
2
解决办法
2万
查看次数

禁止make规则错误输出

我有一个创建目录的规则

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 gnu-make

11
推荐指数
3
解决办法
1万
查看次数

Makefile:声明所有目标为PHONY

考虑一个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 phony-target

9
推荐指数
3
解决办法
2554
查看次数

停止执行makefile

我实现了一个配方,以便将所有剩余的字符串传递给命令,例如在此脚本中:

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尝试执行剩余的字符串,所以错误:

make: *** No rule to make target `my'.  Stop.
Run Code Online (Sandbox Code Playgroud)

我怎么能阻止这个?

注意:作为解决方法,我定义了一个虚拟配方:

%:
    @echo
Run Code Online (Sandbox Code Playgroud)

所以这将打印一个空字符串而不是错误.

我想避免做类似的事情:

make run-example param="my custom param"
Run Code Online (Sandbox Code Playgroud)

bash shell makefile

9
推荐指数
2
解决办法
1314
查看次数