修改Makefile替换Python版本后出现No rule to make target报错如何解决
问题根因
- 自定义构建文件未被make识别:
make命令默认仅会自动加载名为Makefile、makefile、GNUmakefile的文件作为规则配置文件,你新建的Makerun文件不会被默认读取,未指定配置文件时make只会读取原Makefile甚至找不到对应任务规则,因此抛出No rule to make target 'task'报错。 - 终端别名不生效属于正常现象:
make执行时调用的是非交互模式的shell,不会加载用户终端配置文件(如.bashrc、.zshrc)中的别名配置,因此你设置的python指向python3的别名在make运行上下文里不会生效。 --dbpwrd参数报错原因:你直接在终端执行的命令中$(postgres_password)是Makefile的变量取值语法,在终端中会被shell识别为命令替换,如果你没有提前定义postgres_password这个shell变量,替换后的值为空,就会触发参数缺失的报错。
解决方案
- 如果你要使用自定义的
Makerun作为构建配置,执行命令时加上-f参数指定配置文件即可:
make -f Makerun config=default_config.mk task
- 更规范的Python版本适配方案,不需要修改所有python调用语句,也不需要新建配置文件,直接在原Makefile最开头新增一行变量定义:
PYTHON = python3
再将原Makefile中所有python xxx.py的调用语句修改为$(PYTHON) xxx.py,修改完成后直接执行原本的make config=default_config.mk task命令即可正常运行。
3. 如果你希望保留Python2.7环境运行原程序,可按以下方式处理依赖和参数问题:
- 安装适配Python2.7的psycopg2版本:
pip2 install psycopg2==2.7.7(2.8及以上版本已停止支持Python2.7) - 执行带数据库密码的命令前,先在终端定义对应变量:
export postgres_password="你的实际数据库密码",再运行python命令即可;也可以直接将密码明文写在参数中:python SciGRID.py --dbpwrd "你的实际数据库密码"
内容的提问来源于stack exchange,提问作者thobrom
相关产品推荐
相关产品推荐

