use environment variable if set otherwise use default value in makefile












1















I can do this:



MY_VAR:=$(myvar)


But what I want is to also define a value for MY_VAR that is used if the environment variable myvar isn't defined. Is this possible?



Something like:



# pseudo code
MY_VAR:=if not $(myvar) then someDefaultValue









share|improve this question



























    1















    I can do this:



    MY_VAR:=$(myvar)


    But what I want is to also define a value for MY_VAR that is used if the environment variable myvar isn't defined. Is this possible?



    Something like:



    # pseudo code
    MY_VAR:=if not $(myvar) then someDefaultValue









    share|improve this question

























      1












      1








      1


      0






      I can do this:



      MY_VAR:=$(myvar)


      But what I want is to also define a value for MY_VAR that is used if the environment variable myvar isn't defined. Is this possible?



      Something like:



      # pseudo code
      MY_VAR:=if not $(myvar) then someDefaultValue









      share|improve this question














      I can do this:



      MY_VAR:=$(myvar)


      But what I want is to also define a value for MY_VAR that is used if the environment variable myvar isn't defined. Is this possible?



      Something like:



      # pseudo code
      MY_VAR:=if not $(myvar) then someDefaultValue






      bash makefile






      share|improve this question













      share|improve this question











      share|improve this question




      share|improve this question










      asked Nov 19 '18 at 7:15









      red888red888

      4,48673887




      4,48673887
























          2 Answers
          2






          active

          oldest

          votes


















          3














          Assuming make is GNU Make, all the environment variable settings inherited by make are automatically registered
          as make variable settings. See 6.10 Variables from the Environment. So you can just write, e.g.



          Makefile (1)



          ifdef myvar
          MYVAR := $(myvar)
          else
          MYVAR := default
          endif

          .PHONY: all

          all:
          echo $(MYVAR)


          Which runs like:



          $ make
          echo default
          default


          when myvar is not defined in the environment; and when it is defined,
          runs like:



          $ export myvar=notDefault
          $ make
          echo notDefault
          notDefault


          And in case the environment variable and the make variable are the same - and why not? - it is simpler still.



          Makefile (2)



          MYVAR ?= default

          .PHONY: all

          all:
          echo $(MYVAR)


          See 6.5 Setting Variables



          Then:



          $ make
          echo default
          default
          $ export MYVAR=notDefault
          $ make
          echo notDefault
          notDefault





          share|improve this answer


























          • coool i saw the question mark in makefiles before, didnt realize this is what it does

            – red888
            Nov 19 '18 at 15:32



















          0














          you can try this code below.



          MY_VAR=${HOSTNAME1}
          if [ "$MY_VAR" = "" ]; then
          MY_VAR="DEFAULT"
          fi





          share|improve this answer


























          • This is a verbose, and slightly incorrect, restatement of the simple built-in shell notation MY_VAR=${HOSTNAME1:-DEFAULT} (the error is that == should properly be = unless you specifically tell Make to use Bash as the SHELL).

            – tripleee
            Nov 19 '18 at 8:38













          • edited, thanks for the correction

            – akd
            Nov 19 '18 at 9:31











          Your Answer






          StackExchange.ifUsing("editor", function () {
          StackExchange.using("externalEditor", function () {
          StackExchange.using("snippets", function () {
          StackExchange.snippets.init();
          });
          });
          }, "code-snippets");

          StackExchange.ready(function() {
          var channelOptions = {
          tags: "".split(" "),
          id: "1"
          };
          initTagRenderer("".split(" "), "".split(" "), channelOptions);

          StackExchange.using("externalEditor", function() {
          // Have to fire editor after snippets, if snippets enabled
          if (StackExchange.settings.snippets.snippetsEnabled) {
          StackExchange.using("snippets", function() {
          createEditor();
          });
          }
          else {
          createEditor();
          }
          });

          function createEditor() {
          StackExchange.prepareEditor({
          heartbeatType: 'answer',
          autoActivateHeartbeat: false,
          convertImagesToLinks: true,
          noModals: true,
          showLowRepImageUploadWarning: true,
          reputationToPostImages: 10,
          bindNavPrevention: true,
          postfix: "",
          imageUploader: {
          brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
          contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
          allowUrls: true
          },
          onDemand: true,
          discardSelector: ".discard-answer"
          ,immediatelyShowMarkdownHelp:true
          });


          }
          });














          draft saved

          draft discarded


















          StackExchange.ready(
          function () {
          StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53369903%2fuse-environment-variable-if-set-otherwise-use-default-value-in-makefile%23new-answer', 'question_page');
          }
          );

          Post as a guest















          Required, but never shown

























          2 Answers
          2






          active

          oldest

          votes








          2 Answers
          2






          active

          oldest

          votes









          active

          oldest

          votes






          active

          oldest

          votes









          3














          Assuming make is GNU Make, all the environment variable settings inherited by make are automatically registered
          as make variable settings. See 6.10 Variables from the Environment. So you can just write, e.g.



          Makefile (1)



          ifdef myvar
          MYVAR := $(myvar)
          else
          MYVAR := default
          endif

          .PHONY: all

          all:
          echo $(MYVAR)


          Which runs like:



          $ make
          echo default
          default


          when myvar is not defined in the environment; and when it is defined,
          runs like:



          $ export myvar=notDefault
          $ make
          echo notDefault
          notDefault


          And in case the environment variable and the make variable are the same - and why not? - it is simpler still.



          Makefile (2)



          MYVAR ?= default

          .PHONY: all

          all:
          echo $(MYVAR)


          See 6.5 Setting Variables



          Then:



          $ make
          echo default
          default
          $ export MYVAR=notDefault
          $ make
          echo notDefault
          notDefault





          share|improve this answer


























          • coool i saw the question mark in makefiles before, didnt realize this is what it does

            – red888
            Nov 19 '18 at 15:32
















          3














          Assuming make is GNU Make, all the environment variable settings inherited by make are automatically registered
          as make variable settings. See 6.10 Variables from the Environment. So you can just write, e.g.



          Makefile (1)



          ifdef myvar
          MYVAR := $(myvar)
          else
          MYVAR := default
          endif

          .PHONY: all

          all:
          echo $(MYVAR)


          Which runs like:



          $ make
          echo default
          default


          when myvar is not defined in the environment; and when it is defined,
          runs like:



          $ export myvar=notDefault
          $ make
          echo notDefault
          notDefault


          And in case the environment variable and the make variable are the same - and why not? - it is simpler still.



          Makefile (2)



          MYVAR ?= default

          .PHONY: all

          all:
          echo $(MYVAR)


          See 6.5 Setting Variables



          Then:



          $ make
          echo default
          default
          $ export MYVAR=notDefault
          $ make
          echo notDefault
          notDefault





          share|improve this answer


























          • coool i saw the question mark in makefiles before, didnt realize this is what it does

            – red888
            Nov 19 '18 at 15:32














          3












          3








          3







          Assuming make is GNU Make, all the environment variable settings inherited by make are automatically registered
          as make variable settings. See 6.10 Variables from the Environment. So you can just write, e.g.



          Makefile (1)



          ifdef myvar
          MYVAR := $(myvar)
          else
          MYVAR := default
          endif

          .PHONY: all

          all:
          echo $(MYVAR)


          Which runs like:



          $ make
          echo default
          default


          when myvar is not defined in the environment; and when it is defined,
          runs like:



          $ export myvar=notDefault
          $ make
          echo notDefault
          notDefault


          And in case the environment variable and the make variable are the same - and why not? - it is simpler still.



          Makefile (2)



          MYVAR ?= default

          .PHONY: all

          all:
          echo $(MYVAR)


          See 6.5 Setting Variables



          Then:



          $ make
          echo default
          default
          $ export MYVAR=notDefault
          $ make
          echo notDefault
          notDefault





          share|improve this answer















          Assuming make is GNU Make, all the environment variable settings inherited by make are automatically registered
          as make variable settings. See 6.10 Variables from the Environment. So you can just write, e.g.



          Makefile (1)



          ifdef myvar
          MYVAR := $(myvar)
          else
          MYVAR := default
          endif

          .PHONY: all

          all:
          echo $(MYVAR)


          Which runs like:



          $ make
          echo default
          default


          when myvar is not defined in the environment; and when it is defined,
          runs like:



          $ export myvar=notDefault
          $ make
          echo notDefault
          notDefault


          And in case the environment variable and the make variable are the same - and why not? - it is simpler still.



          Makefile (2)



          MYVAR ?= default

          .PHONY: all

          all:
          echo $(MYVAR)


          See 6.5 Setting Variables



          Then:



          $ make
          echo default
          default
          $ export MYVAR=notDefault
          $ make
          echo notDefault
          notDefault






          share|improve this answer














          share|improve this answer



          share|improve this answer








          edited Nov 19 '18 at 8:56

























          answered Nov 19 '18 at 8:40









          Mike KinghanMike Kinghan

          30.4k763112




          30.4k763112













          • coool i saw the question mark in makefiles before, didnt realize this is what it does

            – red888
            Nov 19 '18 at 15:32



















          • coool i saw the question mark in makefiles before, didnt realize this is what it does

            – red888
            Nov 19 '18 at 15:32

















          coool i saw the question mark in makefiles before, didnt realize this is what it does

          – red888
          Nov 19 '18 at 15:32





          coool i saw the question mark in makefiles before, didnt realize this is what it does

          – red888
          Nov 19 '18 at 15:32













          0














          you can try this code below.



          MY_VAR=${HOSTNAME1}
          if [ "$MY_VAR" = "" ]; then
          MY_VAR="DEFAULT"
          fi





          share|improve this answer


























          • This is a verbose, and slightly incorrect, restatement of the simple built-in shell notation MY_VAR=${HOSTNAME1:-DEFAULT} (the error is that == should properly be = unless you specifically tell Make to use Bash as the SHELL).

            – tripleee
            Nov 19 '18 at 8:38













          • edited, thanks for the correction

            – akd
            Nov 19 '18 at 9:31
















          0














          you can try this code below.



          MY_VAR=${HOSTNAME1}
          if [ "$MY_VAR" = "" ]; then
          MY_VAR="DEFAULT"
          fi





          share|improve this answer


























          • This is a verbose, and slightly incorrect, restatement of the simple built-in shell notation MY_VAR=${HOSTNAME1:-DEFAULT} (the error is that == should properly be = unless you specifically tell Make to use Bash as the SHELL).

            – tripleee
            Nov 19 '18 at 8:38













          • edited, thanks for the correction

            – akd
            Nov 19 '18 at 9:31














          0












          0








          0







          you can try this code below.



          MY_VAR=${HOSTNAME1}
          if [ "$MY_VAR" = "" ]; then
          MY_VAR="DEFAULT"
          fi





          share|improve this answer















          you can try this code below.



          MY_VAR=${HOSTNAME1}
          if [ "$MY_VAR" = "" ]; then
          MY_VAR="DEFAULT"
          fi






          share|improve this answer














          share|improve this answer



          share|improve this answer








          edited Nov 19 '18 at 9:30

























          answered Nov 19 '18 at 7:35









          akdakd

          92




          92













          • This is a verbose, and slightly incorrect, restatement of the simple built-in shell notation MY_VAR=${HOSTNAME1:-DEFAULT} (the error is that == should properly be = unless you specifically tell Make to use Bash as the SHELL).

            – tripleee
            Nov 19 '18 at 8:38













          • edited, thanks for the correction

            – akd
            Nov 19 '18 at 9:31



















          • This is a verbose, and slightly incorrect, restatement of the simple built-in shell notation MY_VAR=${HOSTNAME1:-DEFAULT} (the error is that == should properly be = unless you specifically tell Make to use Bash as the SHELL).

            – tripleee
            Nov 19 '18 at 8:38













          • edited, thanks for the correction

            – akd
            Nov 19 '18 at 9:31

















          This is a verbose, and slightly incorrect, restatement of the simple built-in shell notation MY_VAR=${HOSTNAME1:-DEFAULT} (the error is that == should properly be = unless you specifically tell Make to use Bash as the SHELL).

          – tripleee
          Nov 19 '18 at 8:38







          This is a verbose, and slightly incorrect, restatement of the simple built-in shell notation MY_VAR=${HOSTNAME1:-DEFAULT} (the error is that == should properly be = unless you specifically tell Make to use Bash as the SHELL).

          – tripleee
          Nov 19 '18 at 8:38















          edited, thanks for the correction

          – akd
          Nov 19 '18 at 9:31





          edited, thanks for the correction

          – akd
          Nov 19 '18 at 9:31


















          draft saved

          draft discarded




















































          Thanks for contributing an answer to Stack Overflow!


          • Please be sure to answer the question. Provide details and share your research!

          But avoid



          • Asking for help, clarification, or responding to other answers.

          • Making statements based on opinion; back them up with references or personal experience.


          To learn more, see our tips on writing great answers.




          draft saved


          draft discarded














          StackExchange.ready(
          function () {
          StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53369903%2fuse-environment-variable-if-set-otherwise-use-default-value-in-makefile%23new-answer', 'question_page');
          }
          );

          Post as a guest















          Required, but never shown





















































          Required, but never shown














          Required, but never shown












          Required, but never shown







          Required, but never shown

































          Required, but never shown














          Required, but never shown












          Required, but never shown







          Required, but never shown







          Popular posts from this blog

          How to change which sound is reproduced for terminal bell?

          Title Spacing in Bjornstrup Chapter, Removing Chapter Number From Contents

          Can I use Tabulator js library in my java Spring + Thymeleaf project?