我使用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
当前回答
对于标准make,您可以通过这样定义宏来传递参数
make run arg1=asdf
然后像这样使用它们
run: ./prog $(arg1)
etc
制作参考资料 微软的NMake
其他回答
对于标准make,您可以通过这样定义宏来传递参数
make run arg1=asdf
然后像这样使用它们
run: ./prog $(arg1)
etc
制作参考资料 微软的NMake
您可以显式地提取命令行中的第n个参数。要做到这一点,你可以使用变量MAKECMDGOALS,它保存给'make'的命令行参数列表,它将其解释为目标列表。如果你想提取第n个参数,你可以使用该变量与"word"函数结合使用,例如,如果你想要第二个参数,你可以将它存储在一个变量中,如下所示:
second_argument := $(word 2, $(MAKECMDGOALS) )
不是很自豪,但我不想传递环境变量,所以我把运行罐装命令的方式颠倒了:
run:
@echo command-you-want
这将打印你想要运行的命令,所以只需要在subshell中求值即可:
$(make run) args to my command
下面是我的例子。注意,我是在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
下面是另一个解决方案,可以帮助解决其中一些用例:
test-%:
$(PYTHON) run-tests.py $@
换句话说,选择一些前缀(在本例中是test-),然后将目标名称直接传递给程序/运行程序。我想,如果涉及到一些运行脚本,可以将目标名称展开为对底层程序有用的内容,那么这是非常有用的。