我使用Makefiles。
我有一个名为run的目标,它运行构建目标。简化后,如下图所示:
prog: ....
...
run: prog
./prog
有传递参数的方法吗?这
make run asdf --> ./prog asdf
make run the dog kicked the cat --> ./prog the dog kicked the cat
我使用Makefiles。
我有一个名为run的目标,它运行构建目标。简化后,如下图所示:
prog: ....
...
run: prog
./prog
有传递参数的方法吗?这
make run asdf --> ./prog asdf
make run the dog kicked the cat --> ./prog the dog kicked the cat
当前回答
你可以像下面这样将变量传递给Makefile:
run:
@echo ./prog $$FOO
用法:
$ make run FOO="the dog kicked the cat"
./prog the dog kicked the cat
or:
$ FOO="the dog kicked the cat" make run
./prog the dog kicked the cat
或者使用Beta提供的解决方案:
run:
@echo ./prog $(filter-out $@,$(MAKECMDGOALS))
%:
@:
%: -匹配任何任务名称的规则; @: -空食谱=什么都不做
用法:
$ make run the dog kicked the cat
./prog the dog kicked the cat
其他回答
它已经有一段时间了,但我将提供我在生产中使用的版本。
我希望有人会觉得它有用。
例子:
.PHONY: greeting
greeting:
echo $(if $s,$s,)
命令:
使问候s="hello world"
输出:
你好世界
Run: ./prog看起来有点奇怪,因为正确的部分应该是一个先决条件,所以Run: prog看起来更好。
我的建议很简单:
.PHONY: run
run:
prog $(arg1)
我想补充一点,可以传递参数:
作为参数:使arg1="asdf"运行 或者定义为environment: arg1="asdf" make run
不。看看GNU make手册页中的语法
生成[-f makefile][选项]…[目标]……
您可以指定多个目标,因此是'no'(至少以您指定的确切方式为no)。
下面是我的例子。注意,我是在Windows 7下编写的,使用Dev-Cpp附带的mingw32-make.exe。(我有c:\Windows\System32\make.bat,所以命令仍然被称为“make”。)
clean:
$(RM) $(OBJ) $(BIN)
@echo off
if "${backup}" NEQ "" ( mkdir ${backup} 2> nul && copy * ${backup} )
日常清洁用途:
make clean
在mydir/中清理和创建备份的用法:
make clean backup=mydir
您可以显式地提取命令行中的第n个参数。要做到这一点,你可以使用变量MAKECMDGOALS,它保存给'make'的命令行参数列表,它将其解释为目标列表。如果你想提取第n个参数,你可以使用该变量与"word"函数结合使用,例如,如果你想要第二个参数,你可以将它存储在一个变量中,如下所示:
second_argument := $(word 2, $(MAKECMDGOALS) )