Qt pro文件中的常用宏说明

一、注释:

用 # 注释,表示到行尾均为注释。

二、include:

包含别的文件,例如:include xx.pri。类似于 c++ 的 #include。。。

三、平台宏:

win32/macx/unix/linux-g++等,分别对应于windows、mac、unix、linux等系统。

四、作用域:

作用域和 if 语句很像,如果某个条件为真,作用域中的设置就会被处理,例如:

debug{
	TARGET = XXd
}
release{
	TARGET = XX
}

上面代码的意思是:如果是 debug 版本,可执行程序的名字是 xxd,否则就是 xx。可以这样写:

debug:TARGET = xxd
release:TARGET = XX

作用域也可以嵌套使用,例如:

win32{
	debug{
		TARGET = xxwd
	}
}

还可以加上 else 语句:

win32{  
  debug{
    TARGET = xxd
  }else{
    TARGET = xx
  }
}

五、操作符

Qt+=: 添加额外的模块支持,例如Qt -= QtCore; Qt += network,phonon,xml,thread

“=” 操作符:
分配一个值给一个变量。例如:TARGET = myapp,这将会删掉原来对 TARGET 的任何设置,并将变量 TARGET 的值设置为 myapp。

“+=” 操作符:
向一个变量的值的列表中添加一个值。例如:DEFINES += QT_DLL,把 QT_DLL 添加到 makefile 的预处理定义的列表中。

“-=” 操作符:
从变量的列表中移除一个值。例如:DEFINES -= QT_DLL,把 QT_DLL 从 Makefile 的预处理定义列表中移除。

“*=” 操作符:
仅仅在一个值不存在于一个变量的值的列表中的时候,把它添加进去。例如:DEFINES *= QT_DLL,只用在 QT_DLL 没有被定义在预处理定义的列表中时,它才会被添加进去。

“~=” 操作符:
将会替换任何与指定的值的正则表达式匹配的任何值。例如:DEFINES ~= s/QT_[DT].+/QT,将会用 QT 来替代任何以 QT_D 或 QT_T 开头的变量中的 QT_D 或 QT_T。

六、TEMPLATE变量

生成 Makefile 采用的模板。以下是可供选择的模板:

  • app:建立一个应用程序 Makefile,这个也是默认值,没有指定模板是默认是这个。
  • lib:建立一个库的 Makefile。
  • vcapp:建立一个应用程序的 visual studio 项目文件。
  • vclib:建立一个库的 visual studio 项目文件。
  • subdirs:创建一个能够进入子目录并且为之生成为它调用 make 的 Makefile。需要在后面用 SUBDIRS=XX 来指定那些子目录。

6.1 app模板

app 模板告诉 qmake 为建立一个应用程序生成一个 Makefile。当使用这个模板时,下面这些 qmake 系统变量是被承认的。你应该在你的 .pro 文件中使用它们来为你的应用程序指定特定信息。

  • HEADERS:需要包含的头文件的列表。
  • SOURCES:需要的源文件的列表。
  • FORMS:需要的 .ui 文件的列表。
  • LEXSOURCES:所有 lex 源文件的列表。
  • YACCSOURCES:所有 yacc 源文件的列表。
  • TARGET:可执行应用程序的名称。默认值为项目文件的名字。
  • DESTDIR:放置可执行程序目标的目录。
  • OBJECTS_DIR:放置 obj 中间文件的目录。
  • MOC_DIR:moc 转换文件路径。
  • RCC_DIR:资源文件路径。
  • UI_DIR:ui 文件转换的路径。
  • RESOURCES:需要包含的资源文件。
  • LIBS:依赖库的路径和名称 -L{xxdirxx} -l{xxnamexx}。
  • LIBEXT:产生lib的后缀。
  • DEFINES:应用程序所需的额外的宏定义列表。
  • INCLUDEPATH:应用程序所需的额外的包含路径列表。
  • DEPENDPATH:应用程序所依赖的搜索路径。
  • VPATH:寻找补充文件的搜索路径。
  • DEF_FILE:只有 Windows 需要:应用程序所要连接的.def文件。
  • RC_FILE:只有 Windows 需要:应用程序的资源文件。
  • RES_FILE:只有 Windows 需要:应用程序所要连接的资源文件。
  • TRANSLATIONS: 多国语言支持文件。
  • INSTALLS:要安装的文件。
  • target.path:安装的路径。

详细请参考 Qt 帮助条目:qmake Variable Reference。


6.2 lib 模板

lib 模板告诉 qmake 为建立一个库而生成 makefile。当使用这个模板时,除了 “app” 模板中提到系统变量,还有一个 VERSION 是被支持的。你需要在为库指定特定信息的 .pro 文件中使用它们。

  • VERSION:目标库的版本号,例如:1.2.3。

6.3 subdirs模板

subdirs 模板告诉 qmake 生成一个 makefile,它可以进入到特定子目录并为这个目录中的项目文件生成 makefile 并且为它调用 make。这个模板只有一个系统变量 SUBDIRS 可以被识别。

  • SUBDIRS:这个变量中包含了所要处理的含有项目文件的子目录的列表。这个项目文件的名称是和子目录同名的,这样 qmake 就可以发现它。例如,如果子目里是 “subapp”,那么在这个目录中的项目文件应该被叫做 subapp.pro。

七、CONFIG变量

配置变量,指定了编译器所要使用的选项和所需要链接的库。

(1)控制编译器标志的选项:

  • release:应用程序将以 release 模式连编,如果 “debug” 被指定,它将被忽略。
  • debug:应用程序将以 debug 模式连编。
  • warn_on:编译器会输出尽可能多的警告信息,如果 “warn_off” 被指定,它将被忽略。
  • warn_off:编译器会输出尽可能少的警告信息。

(2)控制需要连接的库的选项:

  • qt:应用程序是一个 Qt 应用程序,并且 Qt 库将会被链接。
  • thread:应用程序是一个多线程程序。
  • x11:应用程序是一个 x11 应用程序或者库。
  • windows:只用于 app 模板,应用程序是一个 windows 下的窗口应用程序。
  • console:只用于 app 模板,应用程序是一个 windows 下的控制台应用程序。
  • dll:只用于 lib 模板,库是一个共享库。
  • staticlib:只用于 lib 模板,库是一个静态库。
  • plugin:只用于 lib 模板,库是一个插件,这将会使 dll 选项生效。

例如:CONFIG += qt debug,使用 qt 库的应用程序,debug 版本。

注意事项:必须使用 “+=”,不要使用 “=”,否则原来的设置会被清除。

八、变量用法

8.1 自定义变量

# 定义了一个变量MY_VARIABLE,并将值设置为value
MY_VARIABLE = value

8.2 变量值的传递

可以通过在其它任何一个变量的变量名前加$$来把这个变量的值分配给当前的变量。例如:

MY_DEFINES = $$DEFINES

现在 MY_DEFINES 变量包含了项目文件在这点时 DEFINES 变量的值。这也和下面的语句一样:

MY_DEFINES = $${DEFINES}

这里列出的不全,最好还是看 Qt 的帮助主题:qmake Function Reference


(1)include(filename)

包含文件。


(2)dirname(file)

返回指定文件的目录名称。例如:

FILE = /etc/X11R6/XF86Config
DIRNAME = $$dirname(FILE) #/etc/X11R6

(3)error( string )

这个函数输出所给定的字符串,然后会使 qmake 退出。例如:

error(An error has occurred in the configuration process.)

(4)exists( filename )

如果指定文件存在,那么函数成功,否则失败。例如:

exists( /local/qt/qmake/main.cpp ) {
	SOURCES += main.cpp
}

如果/local/qt/qmake/main.cpp存在,那么 main.cpp 将会被添加到源文件列表中。

注意可以不用考虑平台使用 “/” 作为目录的分隔符。


(5)infile( filename, var, val )
如果 filename 文件(当它被 qmake 自己解析时)包含一个值为 val 的变量 var,那么这个函数将会返回成功。你也可以不传递第三个参数(val),这时函数将只测试文件中是否分配有这样一个变量 var。


(6)isEmpty( variablename )
这和使用count( variablename, 0 )是一样的。如果叫做 variablename 的变量没有任何元素,函数返回成功否则失败。例如:

isEmpty( CONFIG ) {
CONFIG += qt warn_on debug
}

(7)message( string )
这个函数只是简单地在控制台上输出消息。

message( "This is a message" )

文本 “This is a message” 被输出到控制台上并且对于项目文件的处理将会继续进行。


(8)replace(string, old_string, new_string)
将 string 中的 old_string 用 new_string 代替,例如:

MESSAGE = This is a tent.
message($$replace(MESSAGE, tent, test))

prints the message:
This is a test.

文本 “This is a message” 被输出到控制台上并且对于项目文件的处理将会继续进行。


(9)warning(string)
这个函数一直返回成功,并且会输出指定字符串给用户,跟 message 是同义词。


(10)system(command)
特定指令被执行并且如果它返回一个 1 的退出值,那么函数成功否则失败。例如:

system( ls /bin ) {
    SOURCES += bin/main.cpp
    HEADERS += bin/main.h
}

所以如果命令ls /bin返回1,那么 bin/main.cpp 将被添加到源文件列表中并且 bin/main.h 将被添加到头文件列表中。


参考:

Qt Pro中常用宏说明


posted @ 2023-06-20 17:06  fengMisaka  阅读(337)  评论(0编辑  收藏  举报