Makefile评估2个变量,然后使用非空变量

Makefile评估2个变量,然后使用非空变量,makefile,gnu-make,Makefile,Gnu Make,我有一个运行Corelec(类似于LibreELEC的Linux发行版)的电视盒,我想找到它的IP地址,然后使用SSH登录到它 我知道以太网接口和Wifi接口的MAC地址 我想在局域网(以太网或Wifi)中查找电视盒的IP地址,前提是我不知道电视盒当前使用哪个接口连接到局域网 以下目标列表不起作用,因为在评估“或”时失败: 包含TVBOX\u IP:=$(或$(TVBOX\u ETH\u IP),$(TVBOX\u WIFI\u IP))的类似目标也不起作用 在确保变量的值首先来自以太网检查,

我有一个运行Corelec(类似于LibreELEC的Linux发行版)的电视盒,我想找到它的IP地址,然后使用SSH登录到它

我知道以太网接口和Wifi接口的MAC地址

我想在局域网(以太网或Wifi)中查找电视盒的IP地址,前提是我不知道电视盒当前使用哪个接口连接到局域网

以下目标列表不起作用,因为在评估“或”时失败:

包含
TVBOX\u IP:=$(或$(TVBOX\u ETH\u IP),$(TVBOX\u WIFI\u IP))
的类似目标也不起作用

  • 在确保变量的值首先来自以太网检查,然后来自Wifi检查之后,如何在其他目标中使用变量
    $(TVOX_IP)
  • 上面的Makefile目标有什么问题

有时,将逻辑移到外部命令更容易。使声明性方法有时难以控制:

考虑另一种选择:将条件移动到shell

  # Notice this is definition, will not force immediate evaluation
TVBOX_ETH_IP= sudo arp-scan 192.168.0.1/24 2>&1 | grep $(TV_ETH_MAC) | awk '{print $$1}'
TVBOX_WIFI_IP=sudo arp-scan 192.168.0.1/24 2>&1 | grep $(TV_WLAN_MAC) | awk '{print $$1}'

find-tvbox-ip:
    IP=$$(${TVBOX_ETH_IP}) ; [ "$$IP" ] || IP=$$(${TVBOX_WIFI_IP}) ; echo "IP=$$IP"

或将条件保持在make$(或…)


似乎您正在尝试使用makefile来执行系统管理任务。请阅读:
  # Notice this is definition, will not force immediate evaluation
TVBOX_ETH_IP= sudo arp-scan 192.168.0.1/24 2>&1 | grep $(TV_ETH_MAC) | awk '{print $$1}'
TVBOX_WIFI_IP=sudo arp-scan 192.168.0.1/24 2>&1 | grep $(TV_WLAN_MAC) | awk '{print $$1}'

find-tvbox-ip:
    IP=$$(${TVBOX_ETH_IP}) ; [ "$$IP" ] || IP=$$(${TVBOX_WIFI_IP}) ; echo "IP=$$IP"

TVBOX_ETH_IP=$(shell sudo arp-scan 192.168.0.1/24 2>&1 | grep $(TV_ETH_MAC) | awk '{print $$1}')
TVBOX_WIFI_IP=$(shell sudo arp-scan 192.168.0.1/24 2>&1 | grep $(TV_WLAN_MAC) | awk '{print $$1})'

TVBOX_IP=$(or ${TVBOX_ETH_IP}, ${TVBOX_ETH_IP})

find-tvbox-ip:
    IP=${TVBOX_IP} ; echo "IP=$$IP"