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
    }
  }

也可以这样写:

  win32:debug{
    TARGET = xxwd
  }

还可以加上else语句:

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

五. 操作符

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

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

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

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

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

  5. “~=”操作符:
    将会替换任何与指定的值的正则表达式匹配的任何值。例如: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来指定那些子目录。
  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。

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

    • VERSION:目标库的版本号,例如:1.2.3。
  2. 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版本。

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

变量用法:

  1. 自定义变量:
    MY_VARIABLE = value

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

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

MY_DEFINES = $$DEFINES

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

MY_DEFINES = $${DEFINES}

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

  1. contains( variablename, value )
    如果value存在于一个被叫做variablename的变量的值的列表中,那么成功,否则失败。例如:
  contains( CONFIG, thread ) {
    DEFINES += QT_THREAD_SUPPORT
  }

如果thread存在于CONFIG变量的值的列表中时,那么QT_THREAD_SUPPORT将会被加入到DEFINES变量的值的列表中。

  1. count( variablename, number )
    如果number与一个被叫做variablename的变量的值的数量一致,那么成功,否则失败。例如:
  count( DEFINES, 5 ) {
    CONFIG += debug
  }
  1. dirname(file)
    返回指定文件的目录名称。例如:
   FILE = /etc/X11R6/XF86Config
   DIRNAME = $$dirname(FILE) #/etc/X11R6
  1. error( string )
    这个函数输出所给定的字符串,然后会使qmake退出。例如:
  error(An error has occurred in the configuration process.)
  1. exists( filename )
    如果指定文件存在,那么函数成功,否则失败。例如:
  exists( /local/qt/qmake/main.cpp ) {
    SOURCES += main.cpp
  }

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

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

  1. find( variablename, substr )
    这将会放置variablename中所有匹配substr的值。substr也可以是正则表达式,而因此将被匹配。
  MY_VAR = one two three four
  MY_VAR2 = $$join(MY_VAR, " -L", -L) -Lfive
  MY_VAR3 = $$member(MY_VAR, 2) $$find(MY_VAR, t.*)

MY_VAR2将会包含-Lone -Ltwo -Lthree -Lfour -Lfive,并且MYVAR3将会包含“three two three”。

  1. include(filename)
    包含文件。

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

  1. isEmpty( variablename )
    这和使用count( variablename, 0 )是一样的。如果叫做variablename的变量没有任何元素,函数返回成功否则失败。例如:
  isEmpty( CONFIG ) {
    CONFIG += qt warn_on debug
  }
  1. join( variablename, glue, before, after )
    这将会在variablename的各个值中间加入glue。如果这个变量的值为非空,那么就会在值的前面加一个前缀before和一个后缀after。只有variablename是必须的字段,其它默认情况下为空串。如果你需要在glue. before或者after中使用空格的话,你必须提供(引用?)它们。

  2. member( variablename, position )
    返回函数的值列表中指定位置的值。如果变量值列表并不存在指定的位置,这将会返回一个空串。variablename是唯一必须的字段,如果没有指定位置,则默认为列表中的第一个值(position默认为0)。

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

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

  1. 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.
  1. system( command )
    特定指令被执行并且如果它返回一个1的退出值,那么函数成功否则失败。例如:
  system( ls /bin ) {
    SOURCES += bin/main.cpp
    HEADERS += bin/main.h
  }

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

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

修改自:https://blog.csdn.net/cqltbe131421/article/details/82491597

Logo

更多推荐