最新消息:20210816 当前crifan.com域名已被污染,为防止失联,请关注(页面右下角的)公众号

【已解决】Makefile中如何在目标中根据条件判断执行不同动作

makefile crifan 3076浏览 0评论

折腾:

【已解决】更新gitbook发布脚本Makefile忽略某些book

期间,希望实现:

再upload这个target目标中,根据当前是否需要被过滤而执行不同动作

所以需要去搞清楚:

如何再目标内,而不是全局,去实现条件判断,执行不同动作

而在:

【未解决】Makefile中如何定义和判断布尔类型变量

期间,无意间参考:

GNU make – Conditional Parts of Makefiles

libs_for_gcc = -lgnu
normal_libs =
foo: $(objects)
ifeq ($(CC),gcc)
        $(CC) -o foo $(objects) $(libs_for_gcc)
else
        $(CC) -o foo $(objects) $(normal_libs)
endif

调试期间,可以用:

upload:
  @echo ================================================================================
ifeq ($(SHOULD_IGNORE), true)
  @echo Upload for $(BOOK_NAME)
  # sshpass -f $(PASSWORD_FILE) rsync -avzh --progress --stats --delete --force $(OUTPUT_PATH) $(REMOTE_USER)@$(REMOTE_SERVER):$(REMOTE_PATH)
else
  @echo Ignore to upload $(BOOK_NAME) to book.crifan.com
endif

【总结】

在target中用条件判断的话:

  • ifeq之类的条件判断,顶格写

  • 注意ifeq,else,endif成对使用即可

  • 其余的代码,正常缩进去写

  • 比如:

    upload:
      @echo  demo how conditional do action within target
    ifeq ($(YOUR_VARIABLE_NAME), some_value_to_check)
      @echo do_what_when_true
    else
      @echo do_what_when_false
    endif

    即可。

    转载请注明:在路上 » 【已解决】Makefile中如何在目标中根据条件判断执行不同动作

    发表我的评论
    取消评论

    表情

    Hi,您需要填写昵称和邮箱!

    • 昵称 (必填)
    • 邮箱 (必填)
    • 网址
    85 queries in 0.191 seconds, using 22.00MB memory