在我的 makefile 中,我试图从包含命令字符串的 make 变量上捕获 shell 函数调用的输出,但没有成功。当我直接在字符串上运行 shell 函数时,它可以工作。我不明白在命令字符串上运行 shell 函数与在包含命令字符串的 make 变量上运行 shell 函数有什么区别。

PG_CONFIG = "/usr/pgsql-9.4/bin/pg_config/"

PG_INCLUDE1 = $(shell $$PG_CONFIG)
PG_INCLUDE2 = $(shell /usr/pgsql-9.4/bin/pg_config --includedir-server)

.PHONY: print

print:
    @echo "PG_CONFIG="$(PG_CONFIG)
    @echo "PG_INCLUDE1="$(PG_INCLUDE1)
    @echo "PG_INCLUDE2="$(PG_INCLUDE2)

输出是:
$make -f Makefile.test print
PG_CONFIG=/usr/pgsql-9.4/bin/pg_config/
PG_INCLUDE1=
PG_INCLUDE2=/usr/pgsql-9.4/include/server

最佳答案

我看到两个问题。 PG_CONFIG 的定义以“/”结尾,因此它被视为一个目录。并且您在 PG_INCLUDE1 中的变量引用应该是 $(PG_CONFIG) 而不是 $$PG_CONFIG。

试试这个:

PG_CONFIG = "/usr/pgsql-9.4/bin/pg_config"

PG_INCLUDE1 = $(shell $(PG_CONFIG))
PG_INCLUDE2 = $(shell /usr/pgsql-9.4/bin/pg_config --includedir-server)

.PHONY: print

print:
    @echo "PG_CONFIG="$(PG_CONFIG)
    @echo "PG_INCLUDE1="$(PG_INCLUDE1)
    @echo "PG_INCLUDE2="$(PG_INCLUDE2)

关于shell - 在 make 变量中的命令上执行 shell 函数,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/29682125/

10-16 18:42