在我的 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/