Makefile ifeq没有表现

时间:2018-03-27 18:04:35

标签: makefile

我有一个非常简单的makefile如下

FRUIT = apple orange

all : $(FRUIT)

$(FRUIT) : 
ifeq ($(@),apple)
    @echo "APPLE!"
else
    @echo "ORANGE!"
endif

执行时

make all

我看到了

ORANGE!
ORANGE!

我检查了我的标签,我相信我在ifeq上的间距是正确的。我错过了什么?

2 个答案:

答案 0 :(得分:1)

首次解析Makefile时会评估ifeq,而不会在执行单个配方时评估$(@)。此时,$(FRUIT): case $@ in apple) echo "APPLE!";; *) echo "ORANGE!";; asac 始终为空字符串。

您可以在配方本身的shell脚本中执行相同的逻辑。

$@

答案 1 :(得分:0)

条件指令在make读取后立即展开,早在执行配方之前。当make解析该行时,else会扩展为空字符串,因此您总是以条件的FRUIT = apple orange all: $(FRUIT) $(FRUIT): @echo "$@!" 部分结束。

只需使用以下内容:

apple:
    @echo "APPLE!"

orange:
    @echo "ORANGE!"

如果您需要单独的食谱,请写下

    angular.module('app', []).controller('MyController', [
      '$scope', '$http',
      function($scope, $http) {
        $scope.SubmitForm = function() {}

        $scope.ClearForm = function() {
            $scope.newPlan = {};
            $scope.$digest();
        }
      }
    ]);

    $('#AddLeavePlanWindow').on('hide.bs.modal', function(e) {
      angular.element("#AppElement").scope().ClearForm();
    });