qt pro文件环境变量

转自:http://blog.youkuaiyun.com/zkl99999/article/details/61197930



变量

$$varName
$${varName}

qmake工程文件内定义变量的值

$$(varName)

qmake运行时,环境变量的值

$(varName)

makefile被处理时,环境变量的值

$$[varName]

Qt配置选项的值

${varName}

你可能见过这个用法,但本文不讨论这个东西,以后用到时会提及

这4中用法区别何在?没有例子我还真说不明白...

$$varName

例子:

  • test.pro

projectname = dbzhang
FULL1 = $$projectname/800
FULL2 = $${projectname}800
!build_pass:message($$FULL2)

运行qmake时,输出结果是

Project MESSAGE: dbzhang/800 dbzhang800
  • 何时加大括号?当变量和后面的字符连接到一块的时候。
  • build_pass 干嘛用的?自己试试看吧,如果没有它,同样的消息在windows下会被输出3次(因为会生成3个makefile文件,每个一次)。

$$(varName)

环境变量,就是大家通常说得环境变量。例子:

  • test.pro

message($$(PATH))

运行qmake时,结果:

Project MESSAGE: /usr/bin:/home/debao/qt-labs/qt5/qtbase/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games

$(varName)

makefile被处理时,环境变量的值?如何理解??

看例子:

  • test.pro

INCLUDEPATH += $(MYINCLUDEPATH)

执行qmake

$ export MYINCLUDEPATH="/home/dbzhang800/include"
$ qmake test.pro

生成的makefile:

...
INCPATH = -I/usr/share/qt4/mkspecs/linux-g++ -I. -I/usr/include/qt4/QtCore -I/usr/include/qt4/QtGui -I/usr/include/qt4 -I$(MYINCLUDEPATH) -I.
...

为了对比,可以将单$符号,改成$$再试试看看,运行命令,结果:

...
INCPATH = -I/usr/share/qt4/mkspecs/linux-g++ -I. -I/usr/include/qt4/QtCore -I/usr/include/qt4/QtGui -I/usr/include/qt4 -I/home/dbzhang800/include -I.
...

$$[varName]

Qt配置选项的值?何解??

  • 配置选项值有哪些?

debao@ubuntu:~/ttt/qmake-t1$ qmake -query
QT_INSTALL_PREFIX:/usr
QT_INSTALL_DATA:/usr/share/qt4
QT_INSTALL_DOCS:/usr/share/qt4/doc
QT_INSTALL_HEADERS:/usr/include/qt4
QT_INSTALL_LIBS:/usr/lib
QT_INSTALL_BINS:/usr/bin
...
  • 有什么用呢?比如,我们编译一个动态库,想将dll放置到Qt的bin目录下(供其它程序使用):

win32:{
    DLLDESTDIR = $$[QT_INSTALL_BINS]
    QMAKE_DISTCLEAN += $$[QT_INSTALL_BINS]\\dbzhang800.dll
}
  • 除了这些还有其他值么?恩,你可以自己设置一些值,比如

$ qmake -set dbzhang 800

然后就可以在pro文件内用 $$[dbzhang] 了

注:在Qt5下,有 qmake -unset dbzhang 可以取消设置,在Qt4下没有 unset!

注:设置值是通过QSettings保存的。你应该知道保存在何处了,呵呵

QSettings(QSettings::UserScope, "Trolltech", "QMake");

晕死,4个这东西竟然写了这么长。只好本文标题中加个(一),慢慢写二三四了。

参考

### 如何在 Qt pro 文件中定义变量 #### 定义全局条件编译变量 通过 `DEFINES` 变量可以定义全局条件编译宏,这些宏可以在整个项目的 C/C++ 源文件使用。例如,在 `.pro` 文件中添加如下内容: ```plaintext DEFINES += CONDITION=1 ``` 这样定义的变量可以通过预处理指令来判断是否存在或其值是多少[^1]。 #### 使用示例 假设需要根据某个条件决定是否启用调试模式,可以在 `.pro` 文件中写入以下内容: ```plaintext DEFINES += DEBUG_MODE_ENABLED ``` 然后在源代码中使用该宏: ```c++ #ifdef DEBUG_MODE_ENABLED qDebug() << "Debug mode is enabled."; #else qDebug() << "Debug mode is disabled."; #endif ``` --- #### 定义字符串宏 除了布尔类型的条件编译宏外,还可以定义字符串类型的宏。例如,定义应用程序版本号和版权信息: ```plaintext DEFINES += APP_VERSION=\"1.0.0\" APP_COPYRIGHT=\"Copyright (C) 2023 MyCompany\" ``` 注意这里的双引号需要用反斜杠转义。之后可以直接在 cpp 文件使用这些宏: ```cpp #include <QDebug> void showAppInfo() { qDebug() << "Version:" << APP_VERSION; qDebug() << "Copyright:" << APP_COPYRIGHT; } ``` 此方法适用于需要传递固定字符串给源码的情况[^2]。 --- #### 添加库依赖 当项目需要链接外部库时,可以通过 `LIBS` 变量指定库路径及其名称。具体语法如下: - `-L` 参数表示库所在的目录; - `-l` 参数表示库的名字(通常省略前缀 `lib` 和后缀扩展名)。 例如,如果有一个名为 `mylibrary.so` 的共享库位于 `/path/to/libs/` 中,则可在 `.pro` 文件中配置如下: ```plaintext LIBS += -L/path/to/libs/ -lmylibrary ``` 需要注意的是,如果使用相对路径指定了库位置,那么最终生成的目标可执行文件运行时也需要能够找到对应的库文件。因此建议将库复制到构建输出目录或者设置环境变量以便动态加载器能找到它们[^3]。 --- #### 常见变量说明 以下是几个常用的 `.pro` 文件变量及其作用简介: | **变量名** | **描述** | |------------------|-------------------------------------------------------------------------| | `HEADERS` | 列举所有的头文件路径 | | `SOURCES` | 列举所有的源文件路径 | | `FORMS` | UI界面设计文件列表 | | `RESOURCES` | 资源文件(.qrc),用于嵌入图片、图标等资源 | | `CONFIG` | 配置选项 | | `TARGET` | 设置生成目标名字 | 例如,为了引入一个资源文件 `image.qrc` ,只需简单声明: ```plaintext RESOURCES += image.qrc ``` 这会让 QRC 工具自动将其转化为二进制数据并集成至应用之中[^4]。 --- #### 自定义变量 除了内置支持的标准字段之外,开发者也可以创建自定义属性供脚本或其他部分调用。比如下面的例子展示了如何存储额外的信息而不影响实际构建过程: ```plaintext MY_CUSTOM_VAR = SomeValue message($$MY_CUSTOM_VAR) ``` 以上命令会在 qmake 执行期间打印出 `"SomeValue"` 。不过这类参数不会直接影响 Makefile 或者后续阶段的行为除非显式引用到了其他地方。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值