首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Makefile配方中分配从文件读取的变量

在Makefile配方中分配从文件读取的变量
EN

Stack Overflow用户
提问于 2019-12-27 09:28:25
回答 2查看 156关注 0票数 1

我正在尝试在Makefile食谱中执行以下操作。使用python脚本获取服务器容器ip。构建在docker容器中运行的命令。在docker容器中运行该命令。

代码语言:javascript
复制
test:
    SIP=$(shell python ./scripts/script.py get-server-ip)
    CMD="iperf3 -c ${SIP} -p 33445"
    docker exec server ${CMD}

我明白了

代码语言:javascript
复制
$ make test
SIP=172.17.0.6
CMD="iperf3 -c  -p 33445"
docker exec server 
"docker exec" requires at least 2 arguments.
See 'docker exec --help'.

用法: docker exec选项CONTAINER命令ARG...

在运行中的容器中运行命令make:* test Error 1

EN

回答 2

Stack Overflow用户

发布于 2019-12-27 12:03:05

我最终得到了类似这样的东西。

代码语言:javascript
复制
SERVER_IP=$(shell python ./scripts/script.py get-server-ip); \
    SERVER_CMD="iperf3 -s -p ${PORT} -4 --logfile s.out"; \
    CLIENT_CMD="iperf3 -c $${SERVER_IP} -p ${PORT} -t 1000 -4 --logfile c.out"; \
    echo "Server Command: " $${SERVER_CMD}; \
    echo "Client Command: " $${CLIENT_CMD}; \
    docker exec -d server $${SERVER_CMD}; \
    docker exec -d client $${CLIENT_CMD};

这似乎工作得很好。我很想听听有没有其他的方法。

票数 0
EN

Stack Overflow用户

发布于 2019-12-29 19:15:09

你可以写成这样的代码。在这里,我使用了一个target-specific variable,假设IP地址只在此规则中是必需的。除了由call function注入的IP地址之外,iperf_command被定义为一个变量,因为它的格式看起来相当固定。

此外,由于规则似乎不应该将目标生成为文件,因此我也将.PHONY target放入其中。

代码语言:javascript
复制
iperf_command = iperf3 -c $1 -p 33445

.PHONY: test
test: iperf_server_ip = $(shell python ./scripts/script.py get-server-ip)
test:
    docker exec server $(call iperf_command,$(iperf_server_ip))
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59495056

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档