[Interest] Fwd: Defining a string in qmake command line
Soroush Rabiei
soroush.rabiei at gmail.com
Fri Jan 24 11:51:01 CET 2014
On Fri, Jan 24, 2014 at 6:09 AM, Thiago Macieira
<thiago.macieira at intel.com>wrote:
>
> You have to work back from what you want. You want a compiler argument
> containing the string:
>
> -DSERIAL="6b6ab0"
>
> Since Make runs commands using the shell, you need to add one level of
> escaping so the shell will do what you want:
>
> -DSERIAL=\"6b6ab0\"
>
> Testing:
> $ make -f /dev/stdin <<<'all:
> /bin/echo -DSERIAL=\"6b6ab0\"
> '
> /bin/echo -DSERIAL=\"6b6ab0\"
> -DSERIAL="6b6ab0"
>
> Now, qmake also processes backslashes, so you need to escape one more
> level:
> to get one backslash in the Makefile, you need to write two. And you need
> one
> more for the quote.
>
> DEFINES += SERIAL=\\\"6b6ab0\\\"
>
> Testing:
> $ qmake /dev/stdin -o /dev/stdout <<<'DEFINES += SERIAL=\\\"6b6ab0\\\"' |
> grep
> SERIAL
> DEFINES = -DSERIAL=\"6b6ab0\" -DQT_GUI_LIB -DQT_CORE_LIB
>
> Now, you wanted to pass that to qmake on the command-line, so you need to
> add
> yet another level of escaping, by doubling each slash and adding one more:
>
> DEFINES+=SERIAL=\\\\\\\"6b6ab0\\\\\\\"
>
> Testing:
> $ qmake /dev/null -o /dev/stdout DEFINES+=SERIAL=\\\\\\\"6b6ab0\\\\\\\" |
> grep
> SERIAL
> # Command: /home/thiago/obj/qt/qt5/qtbase/bin/qmake
> DEFINES+=SERIAL=\\\6b6ab0\\\ -o . /dev/null
> DEFINES = -DSERIAL=\"6b6ab0\" -DQT_GUI_LIB -DQT_CORE_LIB
> $(QMAKE) DEFINES+=SERIAL=\\\6b6ab0\\\ /dev/null
> @$(QMAKE) DEFINES+=SERIAL=\\\6b6ab0\\\ /dev/null
>
> Note that the DEFINES variable is correct in the Makefile, but the command
> for
> qmake to rerun itself is not. That's an apparent qmake bug.
>
> PS: don't try this with spaces. You need $$quote for that.
I wasted a day on this issue. I was looking to Makefile all the time and I
thought that this is not going to work because there is no " in `cat
./Makefile | grep SERIAL`. All definitions looks like this:
DEFINES+=SERIAL=\\\6b6ab0\\\
Though make, passes right argument to the compiler (how this happens?):
g++ -c -m64 -pipe -std=c++0x -O2 -Wall -W -D_REENTRANT -fPIC
-DQT_WEBKIT -SERIAL=\"6b6ab0\"
I'm going to force Windows users to use a shell (MSYS) if this way is not
cross-platform enough.
Thanks
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.qt-project.org/pipermail/interest/attachments/20140124/86ee07fd/attachment.html>
More information about the Interest
mailing list