注释
以”#”开始的行,直到结束
模板变量
告诉qmake生成哪种makefile
TEMPLATE = app
其中
- app - 表示该工程建立一个应用程序的makefile。这是默认值,所以如果模板没有被指定,这个将被使用
- lib - 表示该工程建立一个库的makefile
- subdir - 生成针对子目录的Makefile,子目录由变量SUBDIRS指定;
- vcapp - 生成用于VS开发环境的软件工程(只用于windows系统);
- vclib - 生成用于VS开发环境的库工程(只用于windows系统);
生成目录
指定生成的可执行程序的目录,可以绝对和相对路径
DESTDIR += ../bin
生成的应用程序名
软件名
TARGET = qtest
编译选项
增添或者移除某个模块、指定编译器所要使用的选项,其可用选项如下:
- 下面这些选项控制着使用哪些编译器标志:
- release - 应用程序将以release模式连编。如果“debug”被指定,它将被忽略。
- debug - 应用程序将以debug模式连编。
- warn_on - 编译器会输出尽可能多的警告信息。如果“warn_off”被指定,它将被忽略。
- warn_off - 编译器会输出尽可能少的警告信息。
- 下面这些选项定义了所要连编的库/应用程序的类型:
- qt - 应用程序是一个Qt应用程序,并且Qt库将会被连接。
- thread - 应用程序是一个多线程应用程序。
- x11 - 应用程序是一个X11应用程序或库。
- windows - 只用于“app”模板:应用程序是一个Windows下的窗口应用程序。
- console - 只用于“app”模板:应用程序是一个Windows下的控制台应用程序。
- dll - 只用于“lib”模板:库是一个共享库(dll)。
- staticlib - 只用于“lib”模板:库是一个静态库。
- plugin - 只用于“lib”模板:库是一个插件,这将会使dll选项生效。
增添C++11和console支持,Qt的各模块
CONFIG += console c++11 network
CONFIG -= qt
可以用空格分隔或者”\”来隔行。
目标文件目录
obj文件存放的目录,可以绝对或相对路径
OBJECTS_DIR += ../tmp
工程中包含的头文件
表示本工程中的头文件
HEADERS += \
libcurl/curl/curl.h \
libcurl/curl/curlbuild.h \
libcurl/curl/curlrules.h \
只要qtcreator目录树里add进去了就自动添加
工程中包含的源文件
表示本工程中的源文件
SOURCES += mytest.cpp\
main.cpp
只要qtcreator目录树里add进去了就自动添加
工程中包含的.ui设计文件
FORMS += forms/painter.ui
工程中包含的资源文件
表示本工程包含的资源文件
RESOURCES += qrc/painter.qrc
只要qtcreator目录树里add进去了就自动添加,更改pro文件会同步更新qtcreator里的目录树,但不会影响硬盘上的资源文件
附加头文件包含目录
一般要编译链接第三方库时配置include目录
例如
INCLUDEPATH += ./boost/include\
src/thirdpart/include
INCLUDEPATH += D:/boost/include\
E:/cocos2dx/include
- 可以用绝对或相对路径
- 相对路径中./可以省略
- 路径中不允许出现空格
链接库
对于静态库(.lib, .a)以及动态库.so
LIBS += -LD:/codetest/libcurlcpp/libcurl/lib/ -llibcurl\
-LD:/codetest/libcurlcpp/libcurl/lib/ -lws2_32\
-LD:/codetest/libcurlcpp/libcurl/lib/ -lwldap32\
-LD:/codetest/libcurlcpp/libcurl/lib/ -lopencv\
-LD:/codetest/libcurlcpp/libcurl/lib/ -lzmq
或
LIBS += D:/codetest/libcurlcpp/libcurl/lib/libcurl.lib\
D:/codetest/libcurlcpp/libcurl/lib/ws2_32.lib\
D:/codetest/libcurlcpp/libcurl/lib/wldap32.lib
D:/codetest/libcurlcpp/libcurl/lib/opencv.a
再或者
LIBS += $$PWD/libcurl/lib/libcurl.lib\
$$PWD/libcurl/lib/ws2_32.lib\
$$PWD/libcurl/lib/wldap32.lib
- 可以用-L指定目录,-l指定库的名称(无需后缀,.lib,.a, .so都适用)
- 可以直接通过绝对路径和相对路径指定库的完整path(需后缀,.lib,.a, .so都适用),相对路径用$$pwd前缀,路径不允许空格
- LIBS += somepath 这个可以多行写,也可以用“\”隔行
- 最后一种只适用于windows静态库
- 对于linux链接库, 比如opencv项目用make编译出的libopencv.a或者libopencv.so,链接的时候必须写 -lopencv ,写项目的名字而不是库的文件名字
- 对于动态库dll,必须拷贝到exe执行目录或者在环境变量里配置路径
预编译宏
DEFINES += USE_OPENSSL\
CURL_STATICLIB
类似于vs里面在工程里设置预编译选项
平台相关性处理
根据qmake所运行的平台来使用相应的作用域来进行处理
win32
{
SOURCES += 1.cpp
}
else
{
SOURCES += 2.cpp
}
根据平台进行条件编译
只适用于Windows编译的一些变量
DEF_FILE - 应用程序所要连接的.def文件。
RC_FILE - 应用程序的资源文件。
RES_FILE - 应用程序所要连接的资源文件。
源文件编码方式
CODECFORSRC = GBK
随手记
qt pro 里面变量的引用
- VAR = foobar =>当运行qmake时,赋值给变量
- $$VAR =>在运行qmake时,QMake变量的值
- $${VAR} =>在运行qmake的时候QMake变量的值(相同但是被封闭以与周围文本分开)
- $(VAR) =>运行Makefile(而不是qmake)时的环境变量的内容
- $$(VAR) =>运行qmake(不是Makefile)时的环境变量的内容
参考资料
[1] Qt工程pro文件的简单配置(尤其是第三方头文件和库)
[2] QT工程pro文件变量说明
[3] QT的pro文件编写,高效简洁,,路径设置 有空格 引入系统环境变量等
[4] QT中PRO文件写法的详细介绍,很有用,很重要!
[5] QT中PRO文件写法的详细介绍