如何在Makefile中将$ dir添加到$ PATH?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何在Makefile中将$ dir添加到$ PATH?相关的知识,希望对你有一定的参考价值。
我想编写一个可以运行测试的Makefile。测试位于“./tests”目录中,要测试的可执行文件位于“./bin”目录中。
当我运行测试时,他们没有看到exec文件,因为目录./bin不在$ PATH中。
当我做这样的事情时:
EXPORT PATH=bin:$PATH
make test
一切正常。但是我需要更改Makefile中的$ PATH。
简单的Makefile内容:
test all:
PATH=bin:${PATH}
@echo $(PATH)
x
它正确打印路径,但是找不到文件x。
当我手动执行此操作时:
$ export PATH=bin:$PATH
$ x
一切都好。
我怎么能改变Makefile中的$ PATH?
你试过Make本身的export
directive(假设你使用GNU Make)?
export PATH := bin:$(PATH)
test all:
x
另外,你的例子中有一个错误:
test all:
PATH=bin:${PATH}
@echo $(PATH)
x
首先,值为echo
ed是由Make执行的PATH
变量的扩展,而不是shell。如果它打印出预期值,那么,我想,你已经在Makefile中的某个地方或者在调用Make的shell中设置了PATH
变量。为了防止这种行为你应该逃避美元:
test all:
PATH=bin:$$PATH
@echo $$PATH
x
其次,无论如何这都行不通,因为Make在separate shell中执行配方的每一行。这可以通过在一行中编写配方来改变:
test all:
export PATH=bin:$$PATH; echo $$PATH; x
如果首先在makefile中设置SHELL变量,则路径更改似乎是持久的:
SHELL := /bin/bash
PATH := bin:$(PATH)
test all:
x
我不知道这是否是所希望的行为。
根据设计,make
解析器在单独的shell调用中执行行,这就是为什么在一行中更改变量(例如PATH
),更改可能不会应用于下一行(请参阅此post)。
解决此问题的一种方法是将多个命令转换为单行(由;
分隔),或使用One Shell特殊目标(.ONESHELL
,从GNU Make 3.82开始)。
或者,您可以在调用shell时提供PATH
变量。例如:
PATH := $(PATH):$(PWD)/bin:/my/other/path
SHELL := env PATH=$(PATH) /bin/bash
我通常做的是显式提供可执行文件的路径:
EXE=./bin/
...
test all:
$(EXE)x
如果我正在交叉编译,我也使用这种技术在像QEMU这样的模拟器下运行非本机二进制文件:
EXE = qemu-mips ./bin/
如果make正在使用sh shell,这应该工作:
test all:
PATH=bin:$PATH x
要在Makefile中设置PATH
变量,请使用以下内容:
PATH := $(PATH):/my/dir
test:
@echo my new PATH = $(PATH)
以上是关于如何在Makefile中将$ dir添加到$ PATH?的主要内容,如果未能解决你的问题,请参考以下文章
如何在 android studio 中将 .aar 文件添加到 gradle.kts?