Shell 根据Makefile中目标内部的条件更改变量的值

Shell 根据Makefile中目标内部的条件更改变量的值,shell,makefile,gnu-make,Shell,Makefile,Gnu Make,在我拥有的makefile中,我想根据条件为变量赋值。 我有: 我试着做: if test condition; then $(eval CMAKE := $(cmake -DCMAKE_BUILD_TYPE=Release ../));\ fi; 但这是行不通的,还有别的办法吗 p.S报告的错误是: Syntax error: ";" unexpected 当我删除“;”时,它显示了另一个错误: Syntax error: "fi" unexpected 这种在外壳和make之间的“来回

在我拥有的makefile中,我想根据条件为变量赋值。
我有:

我试着做:

if test condition;
then $(eval CMAKE := $(cmake -DCMAKE_BUILD_TYPE=Release ../));\
fi;
但这是行不通的,还有别的办法吗

p.S报告的错误是:

Syntax error: ";" unexpected
当我删除“;”时,它显示了另一个错误:

Syntax error: "fi" unexpected
这种在外壳和make之间的“来回”是不可能的。理解它们之间的关系很重要:make没有实现shell解析器:它只是为此运行shell。从shell返回的所有make都是一个退出代码,用于确定命令是否成功

Make首先展开配方中的所有变量和函数,然后将生成的命令传递给要调用的shell,从而运行配方

因此,您的示例不起作用的原因应该很清楚

在我们给你提供好的建议之前,我们需要更高层次的信息,确切地告诉你想要做什么以及为什么。执行所需操作的一种方法是使用
$(shell…
计算条件,所有这些都不在任何规则范围内:

ifeq ($(shell test condition && echo true),true)
  CMAKE := cmake -DCMAKE_BUILD_TYPE=Release ../
endif
然而,我觉得这很奇怪。如果你描述了你真正想做的事情,我们可能会给你更好的帮助

预计到达时间:

根据下面的描述,最好的选择是特定于目标的变量:

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) ../

我在makefile中有两个目标debug和release。还有另一个目标叫做setup。根据调用哪一个,我需要编译代码。如果调用setup,则编译中的一个步骤是“cmake../”,而如果调用debug,则编译中的一个步骤是“cmake-DCMAKE_BUILD_TYPE=Release../”,对于Release也是如此。因此,我尝试使用一个变量,该变量的值可以根据调用的目标进行更改。实际上,调试和发布与安装程序相同,只有一行不同,即“cmake../”,因此我希望像上面那样执行此操作,而无需复制整个安装程序并修改这一行。OK。你是说你不知道如何根据你的需要调整我上面的建议?
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) ../