Sometimes we need to refer to some header files that come with Qt. For example, when using quazip, you can directly use the QtZlib
that comes with Qt. At this time, you may directly add the following sentence to xxx.pro
:
INCLUDEPATH += D:\Qt\6.2.4\msvc2019_64\include\QtZlib
However, due to the use of absolute paths, your project will be less portable. So we can solve this problem by using Qmake
built-in environment variables.
Qmake built-in environment variables
Please read the above official documents by yourself first, the meaning and usage of each variable will not be redundantly described here.
For the above example, we can get D:\Qt\6.2.4\msvc2019_64
through the variable QT_INSTALL_PREFIX
, and test it:
C:\Users\fygame>d:
D:\>cd D:\Qt\6.2.4\msvc2019_64\bin
D:\Qt\6.2.4\msvc2019_64\bin>qmake -query "QT_INSTALL_PREFIX"
D:/Qt/6.2.4/msvc2019_64
Then the above configuration can be directly modified to:
INCLUDEPATH += $$[QT_INSTALL_PREFIX]\include\QtZlib
Is this OK? Unfortunately, on Windows, you may still not find the relevant header files at compile time, why?
Note the difference between slashes and backslashes
Let's take a look at the difference between the compilation instructions generated by these two methods
cl -c -nologo -Zc:wchar_t -FS -Zc:rvalueCast -Zc:inline -Zc:strictStrings -Zc:throwingNew -permissive- -Zc:__cplusplus -Zc:externConstexpr -Zi -MDd -std:c++17 -utf-8 -W3 -w34100 -w34189 -w44996 -w44456 -w44457 -w44458 -wd4577 -wd4467 -EHsc /Fd.obj\qztest.vc.pdb -DUNICODE -D_UNICODE -DWIN32 -D_ENABLE_EXTENDED_ALIGNED_STORAGE -DWIN64 -DNOMINMAX -DQT_QML_DEBUG -DQT_NETWORK_LIB -DQT_CORE5COMPAT_LIB -DQT_TESTLIB_LIB -DQT_CORE_LIB -DQT_TESTCASE_BUILDDIR="\"F:/tgit/qtprojects/build-quazip-0.7.3_Qt_6_2_4_MSVC2019_64bit-Debug/qztest\"" -I..\..\quazip-0.7.3-qt6\qztest -I. -I..\..\quazip-0.7.3-qt6\qztest -ID:\Qt\6.2.4\msvc2019_64\include\QtZlib -I..\..\quazip-0.7.3-qt6 -ID:\Qt\6.2.4\msvc2019_64\include -ID:\Qt\6.2.4\msvc2019_64\include\QtNetwork -ID:\Qt\6.2.4\msvc2019_64\include\QtCore5Compat -ID:\Qt\6.2.4\msvc2019_64\include\QtTest -ID:\Qt\6.2.4\msvc2019_64\include\QtCore -I.moc -ID:\Qt\6.2.4\msvc2019_64\mkspecs\win32-msvc -Fo.obj\ @C:\Users\fygame\AppData\Local\Temp\qztest.obj.355020.15.jom
Note that the option for QtZlib
is -ID:\Qt\6.2.4\msvc2019_64\include\QtZlib
cl -c -nologo -Zc:wchar_t -FS -Zc:rvalueCast -Zc:inline -Zc:strictStrings -Zc:throwingNew -permissive- -Zc:__cplusplus -Zc:externConstexpr -Zi -MDd -std:c++17 -utf-8 -W3 -w34100 -w34189 -w44996 -w44456 -w44457 -w44458 -wd4577 -wd4467 -EHsc /Fd.obj\qztest.vc.pdb -DUNICODE -D_UNICODE -DWIN32 -D_ENABLE_EXTENDED_ALIGNED_STORAGE -DWIN64 -DNOMINMAX -DQT_QML_DEBUG -DQT_NETWORK_LIB -DQT_CORE5COMPAT_LIB -DQT_TESTLIB_LIB -DQT_CORE_LIB -DQT_TESTCASE_BUILDDIR="\"F:/tgit/qtprojects/build-quazip-0.7.3_Qt_6_2_4_MSVC2019_64bit-Debug/qztest\"" -I..\..\quazip-0.7.3-qt6\qztest -I. -I..\..\quazip-0.7.3-qt6\qztest -ID:/Qt/6.2.4/msvc2019_64/include/QtZlib -I..\..\quazip-0.7.3-qt6 -ID:\Qt\6.2.4\msvc2019_64\include -ID:\Qt\6.2.4\msvc2019_64\include\QtNetwork -ID:\Qt\6.2.4\msvc2019_64\include\QtCore5Compat -ID:\Qt\6.2.4\msvc2019_64\include\QtTest -ID:\Qt\6.2.4\msvc2019_64\include\QtCore -I.moc -ID:\Qt\6.2.4\msvc2019_64\mkspecs\win32-msvc -Fo.obj\ @C:\Users\fygame\AppData\Local\Temp\qztest.obj.360680.31.jom
Note that the options for QtZlib
are -
ID:/Qt/6.2.4/msvc2019_64/include/QtZlib
The only difference between the two is the difference between slashes and backslashes. Windows paths use backslashes, while built-in variables use slashes. So, modify the above configuration statement again:
INCLUDEPATH += $$system_path($$[QT_INSTALL_PREFIX])\include\QtZlib
Replace the slashes with backslashes and you can compile~
A note about the qmake function: