我知道你可以在makefile中使用if语句如下:
foo: $(objects) ifeq ($(CC),gcc) $(CC) -o foo $(objects) $(libs_for_gcc) else $(CC) -o foo $(objects) $(normal_libs) endif
有没有办法像可能的三元类型运算符那样进行条件替换.
(condition?$(CC):$(CC2)) -o foo $(objects) $(libs_for_gcc)
如果没有什么是最惯用的方式来实现这个例子
我添加了c标签,因为问题只有7个视图,我认为使用c的人可能会知道答案,我知道这不是严格的问题(虽然我打算用它编译c)
编辑:看起来有一个if函数使用这种语法
$(如果条件,那么部分[,else-part])
我对它的工作方式仍然有点困惑
解决方法
正如您所发现的那样,$(if …)函数可以作为三元运算符.真正的问题是,条件语(真与假)如何在GNU make中工作?在GNU make中需要条件(布尔表达式)的地方,空字符串被视为false,任何其他值都被视为true.
因此,要测试$(CC)是否为字符串gcc,您需要使用一个函数,当它不是时将返回一个空值,并且当它是非空值时.
通常,过滤器和过滤器功能用于此目的.不幸的是,最简单的方法就是以这种方式使用它们,以获得“不相等”的结果;换句话说,使用这些函数,如果字符串不是gcc,则准确生成非空字符串(true)要简单得多,如果值为gcc则为空字符串(false).例如:
$(if $(filter-out gcc,$(CC)),$(info is not gcc),$(info is gcc))