gpt4 book ai didi

makefile - 检查 Makefile 中的程序是否存在,否则运行命令

转载 作者:行者123 更新时间:2023-12-04 08:15:07 24 4
gpt4 key购买 nike

我想创建一个 Makefile 来识别系统中是否存在给定的程序,如果不存在则运行另一个目标(或命令)。请阅读我在问题末尾的脚本(P.S.),然后将其标记为重复。
总之,我想做如下伪代码:

if (myProgram.exists()):
myProgram arg0 arg1 arg2
else:
otherProgram arg0 arg1 arg2 #suppose that otherProgram will always exists
我已经按照 this SO question 的最佳答案尝试了一些解决方案,这告诉我做这样的事情:
check: ; @which myProgram > /dev/null
mytarget: check
myProgram arg0 arg1 arg2
该解决方案确实有效,但 这将中止程序而不是执行另一个 makefile 目标/命令 .我尝试了很多不同的实现,但没有一个解决了我的问题。
如何在 Makefile 中实现类似的功能?
P.S:这个问题不是来自“ Check if a program exists from a Makefile”的重复问题,因为后者的目的是在程序不存在时停止执行,而前者的目的是在程序不存在时运行另一个目标。

最佳答案

一般用例:
在 Makefile 中做类似的事情很容易(对于简单的问题;复杂的问题需要更多的关注,也许还有其他的解决方案)。
对于您的示例,以下代码将起作用:

run: check
myProgram arg0 arg1 arg2

check:
@type myProgram >/dev/null 2>&1 || otherProgram arg0 arg1 arg2
当然,您应该针对您的问题修改它。为了帮助您,您可以从我的一个项目中阅读一个真实的用例。

一个真实的用例:
现在让我们看一个取自 this small graph implementation in Python 的真实用例.我用 unittest 写了一些测试以 (a) 我可以直接从 Python 执行它或 (b) 可以从 nose 执行它的方式.后者更冗长,因此更适合用于测试目的。
要运行 (a) 我需要类似 python mytest.py 的东西.对于 (b) 我需要类似 nosetests -v mytest.py 的东西.看看我的 makefile :
all: run_tests

run_tests: check
nosetests -v test_digraph.py
nosetests -v test_not_digraph.py

check:
@type nosetests >/dev/null 2>&1 || /usr/bin/env python test_digraph.py
@type nosetests >/dev/null 2>&1 || /usr/bin/env python test_not_digraph.py
这个 makefile 将检查是否 nosetests存在,如果不存在,它将直接从 Python 执行测试(使用 /usr/bin/env python test_digraph.py)。如 nosetests存在,那么它将执行来自 run_tests 的指令目标(换句话说, nosetests -v test_digraph.pynosetests -v test_not_digraph.py )。
希望能帮助到你!

关于makefile - 检查 Makefile 中的程序是否存在,否则运行命令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33227553/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com