在我的makefile中,我想根据条件为变量赋值 我有:
CMAKE=cmake ../
我尝试过:
if test condition;
then $(eval CMAKE := $(cmake -DCMAKE_BUILD_TYPE=Release ../));\
fi;
但这不起作用。还有其他办法吗?
P.S报告的错误是:
Syntax error: ";" unexpected
当我删除“;” ,它显示了另一个错误:
Syntax error: "fi" unexpected
答案 0 :(得分:0)
shell和make之间的这种“来回”是不可能的。理解它们之间的关系很重要:make没有实现shell解析器:它只是为它运行shell。所有make从shell返回的是一个退出代码,用于确定命令是否成功。
通过首先展开配方中的所有变量和函数,然后将生成的命令传递给要调用的shell,来运行配方。
因此,应该清楚为什么你的例子不起作用。
在我们为您提供良好建议之前,我们需要更高级别的信息,确切了解您要做的事情以及原因。实现所需目标的一种方法是使用$(shell ...)
来计算条件,所有这些都在任何规则之外:
ifeq ($(shell test condition && echo true),true)
CMAKE := cmake -DCMAKE_BUILD_TYPE=Release ../
endif
然而,这看起来很奇怪。如果你描述了你真正想做的事情,我们可能会给你更好的帮助。
ETA:
根据您的描述,最佳选择是特定于目标的变量:
CMAKE_BUILD_FLAG = -DCMAKE_BUILD_TYPE=$(CMAKE_BUILD_TYPE)
debug: CMAKE_BUILD_TYPE = Debug
release: CMAKE_BUILD_TYPE = Release
setup: CMAKE_BUILD_FLAG =
debug release setup: all
all:
cmake $(CMAKE_BUILD_FLAG) ../