我有一个带有 5 个 python 脚本的工具py,py,py,d.py和py。我必须在 Linux 中运行这个程序。py是我运行的一个程序,它导入其他文件并使用它们。为了运行 A.py,我使用命令
$ python A.py
到目前为止,输入和输出路径都是硬编码在 A.py 中。现在我应该写一个生成文件包含所有文件结构和依赖项。该 makefile 还应包含用于执行 python scrip A.py 的命令。当make makefile
调用命令并且工具应该开始运行时,必须了解所需的输入和输出路径。这个怎么做?
编辑:
makefile 应该是这样的,包含所有这些细节。
INPUT_PATH = list of all input paths
FILES = list of .c files located in the above specified paths
OUTPUT_PATH = output path where generated file has to be stored
command to execute python scrip:
A.py inputpath+filename outputpath
因此,每当有新的输入 .c 文件时,它们都会被添加到 makefile 的列表中。您可以建议任何此类示例 makefile 吗?
答案1
在 python 中,你可以从 so 获取命令行参数,sys.argv
而不是
#!/usr/bin/env python
base_dir = /hard/coded/path
你做:
#!/usr/bin/env python
import sys
base_dir = sys.argv[1]
(放入支票可能是合适的)。如果你明确地使用 python 启动程序,你可以省略第一行,但如果你制作A.py
可执行文件,你会需要它,那么在那里也没有什么坏处。
现在您可以在您的中makefile
指定:
default:
python A.py /hard/coded/path
(确保Tab前面有一个空格python
,而不是 8 个空格。)
然后你可以运行make
(不需要做,make makefile
除非你有一个Makefile
或与Gnu make aGNUmakefile
在同一目录中)
答案2
在这里我发现了最优雅的做法生成文件
脚步:
- 在这里定义一个变量我使用浏览器_PYSCRIPT
- 输入要调用的 python(或任何语言)脚本。
- 使用export导出脚本
- 使用 python -c "$$BROWSER_PYSCRIPT" 执行脚本
运行生成文件:
简单使用:
- 制作浏览器
define BROWSER_PYSCRIPT
import sys, os
print ('sys.argv[0] =', sys.argv[0])
pathname = os.path.dirname(sys.argv[0])
print ('path =', pathname)
print ('full path =', os.path.abspath(pathname))
endef
export BROWSER_PYSCRIPT
BROWSER:
python -c "$$BROWSER_PYSCRIPT"
结果:
-> make BROWSER [Thu Jun 11 23:13:45 2020]
python -c "$BROWSER_PYSCRIPT"
sys.argv[0] = -c
path =
full path = /Users/myPC/Desktop
答案3
我强烈建议您阅读基础知识生成文件教程。
您基本上想要的是将路径放入宏中,在这些情况下,宏的工作方式与变量类似。
例如DIR=/your/path
。
请注意,指令如下所示:
directive:
command
如果您的指令已命名default
,否则all
它将在不从命令行显式调用该指令的情况下执行。所以你不必调用 with make directive
,只需make
.
现在,命令前面的空格,必须是制表符。我还建议命名您的 makefile Makefile
(大写“M”),这样您只需输入 即可调用它make
。
现在,您的脚本必须能够接收命令行参数(在本例中为目录),并且您可以调用类似以下内容的内容:
python A.py $(DIR)
作为DIR
具有正确目录名称的宏。
另外,我建议阅读相关内容GNU 制作手册
当然,Makefile 的内容远不止此范围中描述的内容。由于 makefile 是 Linux 开发中不可或缺的一部分,我强烈地建议至少掌握基础知识!