makefile 和shell文件相互调用

本文介绍如何在Shell脚本中调用Makefile进行编译安装,并展示如何从Makefile调用Shell脚本执行特定任务。此外还涉及了Perl与Python文件的调用方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

shell 文件内调用makefile文件:

 
#!/bin/bash
cd ctemplate-2.1
./configure
sudo make -f install
cd ../
cd TemplateProcesser
make

说明:./configure文件是shell脚本文件,即shell内调用shell文件是很容易的;TemplateProcesser目录内有Makefile文件,调用方式,直接:make
 
makefile文件内调用shell脚本文件:

 
SHELL := /bin/bash
test:
@pwd
cd ./TemplateProcesser && pwd
sh ./build.sh
@pwd
说明:build.sh为shell脚本文件。

调用perl文件
/usr/bin/perl  *.pl
调用python文件
/usr/bin/env *.py
### 调用 Shell 命令或脚本的方法 在 Makefile调用 Shell 命令或脚本是一个常见的需求,以下是实现这一功能的具体方法以及注意事项。 #### 方法一:直接写入命令 可以直接在目标的依赖列表之后编写 Shell 命令。每条命令前需要用 Tab 键缩进[^1]。例如: ```makefile target: @echo "This is a shell command" @ls -l /path/to/directory ``` 这里 `@` 符号的作用是抑制命令本身的打印输出,仅显示实际运行的结果[^1]。 #### 方法二:通过变量存储命令 可以先定义一个变量保存复杂的 Shell 命令,然后再将其作为目标的一部分执行。这种方式有助于提高可读性维护性。例如: ```makefile SHELL_COMMAND := ls -la && echo "Directory listing complete" target: $(SHELL_COMMAND) ``` #### 方法三:调用外部脚本 如果需要执行更复杂的功能,可以选择调用独立的 Shell 脚本文件。这通常适用于那些不适合直接嵌入到 Makefile 的逻辑。例如: 假设有一个名为 `script.sh` 的脚本文件,则可以在 Makefile 中这样调用它: ```makefile SCRIPT_PATH := ./scripts/script.sh run-script: bash $(SCRIPT_PATH) arg1 arg2 ``` #### 注意事项 - **空格问题**:当使用条件语句或者某些特定函数时,容易因为遗漏必要的空格而导致错误。例如,在判断文件夹存在与否的情况下,应该确保正确的语法结构[^2]。 正确的例子如下所示: ```makefile DIR_EXISTS := $(shell test -d my_directory && echo yes) check-directory: if [ "$(DIR_EXISTS)" = "yes" ]; then \ echo "Directory exists"; \ else \ echo "Directory does not exist"; \ fi ``` - **特殊字符转义**:对于一些特殊的 Shell 字符(如 `$`, `\`),可能需要额外处理以防止被误解析为 Makefile 的元字符。 --- ### 示例综合代码 下面给出一个完整的例子,展示如何在一个项目中利用这些技术完成多个任务: ```makefile # 定义路径其他参数 BASE_DIR := . LOG_FILE := log.txt # 判断日志目录是否存在并创建 check-log-dir: mkdir -p $(BASE_DIR)/logs # 执行自定义脚本 execute-script: python3 $(BASE_DIR)/main.py >> $(BASE_DIR)/logs/$(LOG_FILE) 2>&1 # 清理操作 clean: rm -rf $(BASE_DIR)/logs/* .PHONY: clean execute-script check-log-dir ``` 此示例展示了从简单的目录检查到复杂 Python 脚本调用的过程,并包含了清理机制以便于后续开发工作流中的重复使用[^1]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值