Skip to content
  • Categories
  • Recent
  • Tags
  • Popular
  • Users
  • Groups
  • Search
  • Get Qt Extensions
  • Unsolved
Collapse
Brand Logo
  1. Home
  2. Qt Development
  3. General and Desktop
  4. [SOLVED] Having custom variables in Makefile
Forum Update on Monday, May 27th 2025

[SOLVED] Having custom variables in Makefile

Scheduled Pinned Locked Moved General and Desktop
qmakemakemakefile
16 Posts 3 Posters 7.3k Views
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • S Offline
    S Offline
    SGaist
    Lifetime Qt Champion
    wrote on 20 Aug 2015, 20:37 last edited by
    #3

    Hi,

    Do you mean something like:

    TEMPLATE = app
    TARGET = test
    INCLUDEPATH += .
    
    # Input
    SOURCES += main.cpp
    DEFINES += MyData=$${TEST}
    message(Environment Variable:  $${TEST})
    

    ?

    Interested in AI ? www.idiap.ch
    Please read the Qt Code of Conduct - https://forum.qt.io/topic/113070/qt-code-of-conduct

    1 Reply Last reply
    0
    • K Offline
      K Offline
      kumararajas
      wrote on 20 Aug 2015, 20:57 last edited by kumararajas
      #4

      Hi,

      Later to a quick search and experiments, I have got what I have wanted but partially.

      Here are the details:

      My Makefile looks like this:

      export BOOST_LIBS_PATH=/path/to/boost
      
      all:
              qmake -o Makefilegen testqmake.pro
      

      As it says, it exports a path, and creates Makefilegen using testqmake.pro.

      testqmake.pro looks like this:

      TEMPLATE = app
      TARGET = myapp
      DEPENDPATH += .
      INCLUDEPATH += .
      
      # Input
      SOURCES += main.cpp
      
      DEFINES += "MYPATH=\"$(BOOST_LIBS_PATH)\""
      
      message("Master pro file path : ["$(BOOST_LIBS_PATH)"]")
      
      MYTESTPATH = $(BOOST_LIBS_PATH)/er/er/er/e
      
      message("My path : ["$${MYTESTPATH}"]")
      

      And in the console

      Project MESSAGE: Master pro file path : [/path/to/boost]
      Project MESSAGE: My path : [/path/to/boost/er/er/er/e]
      Project MESSAGE: My path : [/lib/aaa/bbb]
      

      But, I want to take this to my source code. But it doesn't work

      DEFINES += "MYPATH=\"$(BOOST_LIBS_PATH)\""
      

      In the generated Makefile

      DEFINES       = -DQT_WEBKIT -DMYPATH=$(BOOST_LIBS_PATH) -DQT_NO_DEBUG -DQT_GUI_LIB -DQT_CORE_LIB -DQT_SHARED
      

      I wish to get as

      DEFINES       = -DQT_WEBKIT -DMYPATH="/path/to/boost" -DQT_NO_DEBUG -DQT_GUI_LIB -DQT_CORE_LIB -DQT_SHARED
      

      How do I pass a variable to defines?

      --Kumar

      1 Reply Last reply
      0
      • S Offline
        S Offline
        SGaist
        Lifetime Qt Champion
        wrote on 20 Aug 2015, 22:03 last edited by SGaist
        #5

        You'll have to escape your string more than that:

        TESTSTR = '\"$$(TEST)\"'
        DEFINES += TEST=\"$${TESTSTR}\"

        SOURCES += main.cpp

        [edit: fixed code sample SGaist]

        Interested in AI ? www.idiap.ch
        Please read the Qt Code of Conduct - https://forum.qt.io/topic/113070/qt-code-of-conduct

        K 1 Reply Last reply 24 Aug 2015, 18:35
        0
        • S SGaist
          20 Aug 2015, 22:03

          You'll have to escape your string more than that:

          TESTSTR = '\"$$(TEST)\"'
          DEFINES += TEST=\"$${TESTSTR}\"

          SOURCES += main.cpp

          [edit: fixed code sample SGaist]

          K Offline
          K Offline
          kumararajas
          wrote on 24 Aug 2015, 18:35 last edited by kumararajas
          #6

          @SGaist Thanks Sam.

          With your thoughts,

          WAT+="\"/lib/aaa/bbb"\"
          DEFINES += WAT=$${WAT}
          
          GCPU_PATH=$(BOOST_LIBS_PATH)
          DEFINES+=GCPU_PATH=$${GCPU_PATH}
          

          And this is how the generated Makefile looks like:

          DEFINES       = -DQT_WEBKIT -DWAT="/lib/aaa/bbb" -DGCPU_PATH=$(BOOST_LIBS_PATH) -DQT_NO_DEBUG -DQT_GUI_LIB -DQT_CORE_LIB -DQT_SHARED
          

          What I see here is, with the local variables, it looks to be working.

          but the environment variable, I am not able to acheive.
          -DGCPU_PATH=$(BOOST_LIBS_PATH) I expect this to be -DGCPU_PATH="/path/to/boost"

          Any more thoughts?

          Thank you,
          Kumara

          --Kumar

          1 Reply Last reply
          0
          • S Offline
            S Offline
            SGaist
            Lifetime Qt Champion
            wrote on 24 Aug 2015, 19:42 last edited by
            #7

            Sorry, it seems that the code highlighter is not working exactly the same when you are editing the answer and once it's re-loaded.

            I've fixed it. Please take a look again, it's already working for environment variables.

            Interested in AI ? www.idiap.ch
            Please read the Qt Code of Conduct - https://forum.qt.io/topic/113070/qt-code-of-conduct

            K 1 Reply Last reply 25 Aug 2015, 15:58
            0
            • S SGaist
              24 Aug 2015, 19:42

              Sorry, it seems that the code highlighter is not working exactly the same when you are editing the answer and once it's re-loaded.

              I've fixed it. Please take a look again, it's already working for environment variables.

              K Offline
              K Offline
              kumararajas
              wrote on 25 Aug 2015, 15:58 last edited by kumararajas
              #8

              Sam, I am bit confused.

              If I understand correctly,

              Having your code,

              TESTSTR = '\\"$\\"'
              DEFINES += TEST=\"$\"
              

              Should I need to add my environment variable here?
              Example:

              TSTR = '\\"$(BOOST_PATH)\\"'
              DEFINES += TEST=$${TSTR}
              

              Makefile looks like this:

              -DTEST=\"$(BOOST_PATH)\"
              

              Or I understood wrongly?

              Please clarify. Thank you very much for your kind help..

              --Kumara

              --Kumar

              1 Reply Last reply
              0
              • S Offline
                S Offline
                SGaist
                Lifetime Qt Champion
                wrote on 25 Aug 2015, 16:12 last edited by SGaist
                #9

                Sorry again about the code formatting…

                Trying again here:

                TESTSTR = '\\"$$(TEST)\\"'
                DEFINES += TEST=\"\$\$\{TESTSTR\}\"

                On that last line remove the backslashes before the dollar signs and curly braces...

                Interested in AI ? www.idiap.ch
                Please read the Qt Code of Conduct - https://forum.qt.io/topic/113070/qt-code-of-conduct

                K 1 Reply Last reply 25 Aug 2015, 16:55
                0
                • S SGaist
                  25 Aug 2015, 16:12

                  Sorry again about the code formatting…

                  Trying again here:

                  TESTSTR = '\\"$$(TEST)\\"'
                  DEFINES += TEST=\"\$\$\{TESTSTR\}\"

                  On that last line remove the backslashes before the dollar signs and curly braces...

                  K Offline
                  K Offline
                  kumararajas
                  wrote on 25 Aug 2015, 16:55 last edited by kumararajas
                  #10

                  I did try the exact as you said..
                  STRT = '\\"$(BOOST_PATH)\\"'
                  DEFINES += BOOST_PATH=\"\$\$\{STRT\}\"
                  And the output is,
                  -DBOOST_PATH="$${STRT}"

                  And I tried removing the back slashes on dollar sign and curly braces
                  STRT = '\\"$(BOOST_PATH)\\"'
                  DEFINES += BOOST_PATH=\"$${STRT}\"
                  And the output is
                  -DBOOST_PATH="\"$(BOOST_PATH)\""

                  Still no success..

                  --Kumara

                  --Kumar

                  1 Reply Last reply
                  0
                  • S Offline
                    S Offline
                    SGaist
                    Lifetime Qt Champion
                    wrote on 25 Aug 2015, 19:52 last edited by SGaist
                    #11

                    What do you get for the various variable if you show a message with their content:

                    e.g.

                    message($$(BOOST_PATH))
                    message(\$\$\{STRT\})
                    ?

                    Again, remove the backslashes in the second line...

                    Interested in AI ? www.idiap.ch
                    Please read the Qt Code of Conduct - https://forum.qt.io/topic/113070/qt-code-of-conduct

                    K 1 Reply Last reply 25 Aug 2015, 20:30
                    0
                    • S SGaist
                      25 Aug 2015, 19:52

                      What do you get for the various variable if you show a message with their content:

                      e.g.

                      message($$(BOOST_PATH))
                      message(\$\$\{STRT\})
                      ?

                      Again, remove the backslashes in the second line...

                      K Offline
                      K Offline
                      kumararajas
                      wrote on 25 Aug 2015, 20:30 last edited by kumararajas
                      #12

                      While printing a message, it looks good.

                      message($(BOOST_PATH))

                      Project MESSAGE: /path/to/boost
                      

                      message($${STRT})

                      Project MESSAGE: \"/path/to/boost\"
                      

                      But why this has not been taken to Makefile? Mysteries..

                      --Kumar

                      1 Reply Last reply
                      0
                      • S Offline
                        S Offline
                        SGaist
                        Lifetime Qt Champion
                        wrote on 25 Aug 2015, 20:40 last edited by
                        #13

                        Then you are likely just missing some escaping for the last call...

                        Interested in AI ? www.idiap.ch
                        Please read the Qt Code of Conduct - https://forum.qt.io/topic/113070/qt-code-of-conduct

                        1 Reply Last reply
                        0
                        • S Offline
                          S Offline
                          SGaist
                          Lifetime Qt Champion
                          wrote on 25 Aug 2015, 20:54 last edited by
                          #14

                          Finally found a way to write it:

                          BOOST = $ $ ( BOOST_PATH )
                          BOOST_STR = ' \ \ " $ $ { BOOST } \ \ " '
                          DEFINES += BOOST_PATH= \ " $ $ { BOOST_STR } \ "
                          

                          Extra spaces to be removed for the sample code

                          Interested in AI ? www.idiap.ch
                          Please read the Qt Code of Conduct - https://forum.qt.io/topic/113070/qt-code-of-conduct

                          K 1 Reply Last reply 25 Aug 2015, 20:59
                          1
                          • S SGaist
                            25 Aug 2015, 20:54

                            Finally found a way to write it:

                            BOOST = $ $ ( BOOST_PATH )
                            BOOST_STR = ' \ \ " $ $ { BOOST } \ \ " '
                            DEFINES += BOOST_PATH= \ " $ $ { BOOST_STR } \ "
                            

                            Extra spaces to be removed for the sample code

                            K Offline
                            K Offline
                            kumararajas
                            wrote on 25 Aug 2015, 20:59 last edited by
                            #15

                            Thanks Sam, for helping me to fix the problem.

                            I do confirm that, it works.

                            (I do not want copy the instruction again here, which contains more spaces :P)

                            With the above code, I can see this in my Makefile

                            -DBOO_PATH="/path/to/boost"
                            

                            It has been a great help! Thanks a lot.

                            --Kumara

                            --Kumar

                            K 1 Reply Last reply 25 Aug 2015, 23:21
                            0
                            • K kumararajas
                              25 Aug 2015, 20:59

                              Thanks Sam, for helping me to fix the problem.

                              I do confirm that, it works.

                              (I do not want copy the instruction again here, which contains more spaces :P)

                              With the above code, I can see this in my Makefile

                              -DBOO_PATH="/path/to/boost"
                              

                              It has been a great help! Thanks a lot.

                              --Kumara

                              K Offline
                              K Offline
                              kumararajas
                              wrote on 25 Aug 2015, 23:21 last edited by kumararajas
                              #16

                              Later to that,

                              I have figured out a problem in having:

                              We need to have \" in the argument:
                              -DBOO_PATH="/path/to/boost"
                              Problem is that, the macro turned out to be
                              #define BOO_PATH /path/to/boost
                              which is actually useless. We need to have double quotes to cover them up.

                              BOOST =  $ $ ( BOOST_PATH )
                              BOOST_STR = ' \ \ " $ $ { BOOST } \ \ " '
                              DEFINES += BOOST_PATH=\ " $ $ { BOOST_STR } \"
                              

                              Again, eliminate the spaces :)

                              --Kumar

                              1 Reply Last reply
                              0

                              12/16

                              25 Aug 2015, 20:30

                              • Login

                              • Login or register to search.
                              12 out of 16
                              • First post
                                12/16
                                Last post
                              0
                              • Categories
                              • Recent
                              • Tags
                              • Popular
                              • Users
                              • Groups
                              • Search
                              • Get Qt Extensions
                              • Unsolved