前言 在linux环境下进行程序开发时,经常需要使用makefile管理编译代码,特别是一些大型工程,而makefile工具语法晦涩深入研究较为困难,好在有很多工具可以自动生成makefile,qmake...qmake特点 为不同的平台的开发项目创建makefile。 可以供给任何一个软件项目使用,而不用管它是不是用Qt写的,尽管它包含了为支持Qt开发所拥有的额外的特征。...TARGET = Func CONFIG += console c++11 #C++11标准 CONFIG -= qt DEFINES += IOS_64 #64位 DEFINES += IOS_LINUX...#Linux系统 QMAKE_CXXFLAGS += -fPIC QMAKE_LFLAGS_DEBUG += -L$$PWD/../.....可以使用qmake -h查看具体的说明 qmake生成makefile 调试经验 在linux平台下可以用ldd命令查看so库所依赖的其他so库,readelf -d libxxx.so | grep
由于Qt的跨平台,其对应的编译配置工具QMake也是跨平台,这意味着QMake语法关键词大部分使用到的东西都是跨平台的。 利用QMake跨平台特性整理出一些跨平台系统命令。...如下表(windows平台): 关键词 命令 含义 QMAKE_CHK_DIR_EXISTS if not exist 检查目录是否存在 QMAKE_COPY copy /y 复制文件 QMAKE_COPY_FILE...copy /y 复制文件 QMAKE_COPY_DIR xcopy /s /q /y /i 复制目录 QMAKE_DEL_DIR rmdir 删除目录 QMAKE_DEL_FILE del 删除文件...QMAKE_MKDIR mkdir 创建目录 QMAKE_MOVE move 移动/重命名
可使用 $$QT....如果 qmake 找到一个 .qmake.cache 文件,那么它会在处理项目文件之前先处理这个文件。 四、文件扩展名 在正常情况下,qmake 会尝试为当前平台使用适当的文件扩展名。...但是,有时需要覆盖每个平台的默认选择并明确定义要使用的 qmake 的文件扩展名。这是通过重新定义某些内置变量来实现的。...例如,可以在项目文件中使用以下分配重新定义用于 moc 文件的扩展名: QMAKE_EXT_MOC = .mymoc 以下变量可用于重新定义 qmake 识别的常见文件扩展名: QMAKE_EXT_MOC...QMAKE_EXT_LEX:更改 Lex 文件(通常在 LEXSOURCES)中使用的后缀。 QMAKE_EXT_YACC:更改 Yacc 文件(通常在 YACCSOURCES)中使用的后缀。
无论是不是用Qt写的软件项目都可以使用用qmake qmak 根据工程文件的内容来生成Makefile。...这个方法能够控件源文件 的使用,并允许在这个过程中的步骤被简单的描述,通常这些描述会在一个文件里。qmake 扩展每一个项目文件里的信息到makefile,用于执行编译和连接所必须的命令。...描述一个项目 项目(.pro)文件的内容用来描述项目,qmake使用文件里的信息生成包含构建每个项目所需的所有命令的makefile.项目文件一般包含源文件和头文件列表,一般配置信息和一些特定程序的描述...然而,使用一些特定平台的变量也许会更有用或者是必须使用的,更详细的信息,请查看 Platform Notes....在配置构建过程时qmake使用的相关环境变量的详细信息,请查看 Configuring qmake.
记录QMake宏定义的使用。...普通定义宏: DEFINES += DEBUG 使用: #ifdef DEBUG qDebug() Debug<"; #endif // output: >Debug< 定义宏值...(带双引号字符): # QMAKE_COPY => cp DEFINES += "COPY_CMD_LINE=\"\\\"$$QMAKE_COPY\\\"\"" 使用: qDebug() << COPY_CMD_LINE
操作模式 qmake可以帮助我们在跨平台构建应用程序的时候变得更简单,我们可以通过写简单的几行必要的信息来生成构建文件,我们可以在任何的软件项目中使用qmake qmake基于pro文件生产构建文件...而且这一过程都在编辑一个文件来实现,qmake将每一个项目文件中的信息展开成一个Makefile,这一步是在编译和连接过程中必须的 关于pro文件 项目是pro文件所描述的,qmake使用这个文件中的信息来构建每一个项目...文件来让你可以构建和运行项目,你可以修改pro文件来设置你的目标 你也可以使用qmake来生成pro文件,更多的信息请看Running qmake 这些基础的配置特性可以生成跨平台的项目,然而一定是有用的...如果你设置一个不同的名字,你可以这样设置 TARGET = helloword 现在你可以使用qmake来生成你应用的Makefile,在你的pro文件中,你可以写下 qmake -o Makefile...,在默认的模式下,qmake使用pro文件中的信息来生成一个makefile,但是它同样有可能使用qmake来生成pro文件,如果你想来显示的设置这个模式,你一定在所有其他的选项中定义它,mode可以是下面的两个值
一些项目开发中用到的qmake实用变量。...计算机架构 QMAKE_HOST.os 计算机系统 QMAKE_HOST.cpu_count 计算机CPU核心数 QMAKE_HOST.name 计算机名 QMAKE_HOST.version 系统版本...(数字形式) QMAKE_HOST.version_string 系统版本(字符串形式) QMAKE_PRE_LINK 编译链接前自动执行命令(注意不是编译前) QMAKE_POST_LINK 编译链接后自动执行命令...($$QMAKE_HOST.name) # 计算机名 message($$QMAKE_HOST.version) # 系统版本(数字形式) message($$...QMAKE_HOST.version_string) # 系统版本(字符串形式) QMAKE_PRE_LINK += echo 'Start Build
以下选项仅在 Linux/Unix 平台上生效: largefile:包括对大文件的支持。 separate_debug_info:将库的调试信息放在单独的文件中。...99、QMAKE_IOS_LAUNCH_SCREEN 此变量仅在 iOS 平台上使用。指定应用程序使用的启动屏幕。如果未设置,则使用默认启动屏幕。...107、QMAKE_LFLAGS_RPATHLINK 指定使用 QMAKE_RPATHLINKDIR 中的值所需的链接器标志。...与 QMAKE_DEVELOPMENT_TEAM 结合使用以指定供应配置文件。 140、QMAKE_MAC_SDK 在 macOS 上构建通用二进制文件时使用此变量。...这仅受某些平台(当前基于 Linux 和 Darwin 的平台)支持,并且可以通过检查是否设置了 QMAKE_REL_RPATH_BASE 来检测。
二、安装文件 在 Unix 上经常使用构建工具来安装应用程序和库,例如通过调用 make install。qmake 有一个安装集的概念。...要生成的名为 mytarget 的目标 2、mytarget 是名为 .buildfile 的 Makefile 文件,该目标由 touch 命令生成(Linux touch命令),即运行 mytarget.commands...指定的命令 3、mytarget 依赖于 mytarget2,即mytarget2生成之后才能生成mytarget,即运行 mytarget2.commands 指定的命令 4、最后一步是使用 QMAKE_EXTRA_TARGETS...第二步是在使用静态库的应用程序中启用此元信息的读取: CONFIG += link_prl 启用此功能后,qmake 将处理应用程序链接的所有库并找到它们的元信息。...qmake 将使用它来确定相关的链接信息,特别是将值添加到应用程序项目文件的 DEFINES 和 LIBS 列表中。
1>Reading Qt configuration (D:/SoftWare/QT5.9.3/5.9.3/msvc2017_64/bin/qmake) 1>GHViewerDetect.vcxproj...: error : ERROR running qmake 1>GHViewerDetect.vcxproj : error : qmake: (D:/SoftWare/QT5.9.3/5.9.3/...msvc2017_64/bin/qmake) 1>GHViewerDetect.vcxproj : error : qmake: $PWD=D:\project\GHView\GHView\GHViewerDetect...\x64\Debug\qmake\temp 1>GHViewerDetect.vcxproj : error : qmake: Project ERROR: Unknown module(s) in...QT: networkauth 1>GHViewerDetect.vcxproj : error : qmake: Error creating Makefile 1>GHViewerDetect.vcxproj
Qt君上手(Qt5.12.2)体验了这些隐藏变量,大部分都可以使用。 下列的这些qmake隐藏变量都能在Qt5.12.2版本中使用。...xcopy /s /q /y /i QMAKE_DEL_DIR 删除目录命令 rmdir QMAKE_DEL_FILE 删除文件命令 del QMAKE_MKDIR 创建目录命令 mkdir QMAKE_MOVE...移动或重命名文件或目录命令 move 获取Qt有关信息的变量 获取到当前使用到的Qt或QMAKE的一些信息(版本,执行文件路径,编译器路径等)。...使用方法如:$$[QMAKE_VERSION],需要注意的是使用方括号包含变量。...Qt版本 使用示例: message($$[QMAKE_VERSION]) message($$[QT_VERSION]) message($$[QMAKE_MKSPECS]) message($$[QT_INSTALL_BINS
0x00 判断某个类型是否存在: 原型: defined(name[, type]) type 含义 test 检查测试函数 replace 检查代替函数 va...
介绍些qmake使用频率较高的函数。
我们使用QtCreator创建一个工程时,项目文件默认会创建以下代码,它们究竟是什么呢?能有什么用?...QMake的unix:!android语句一般指的是arm平台。...QMake的INSTALLS变量描述: https://doc.qt.io/qt-5/qmake-variable-reference.html#installs
用 cmake 构建Qt工程(对比qmake进行学习) cmake vs qmake qmake 是为 Qt 量身打造的,使用起来非常方便 cmake 使用上不如qmake简单直接,但复杂换来的是强大的功能...用 qmake 时: 默认是 windows 子系统 可以通过 CONFIG += console 使用 console 子系统 用 cmake 是: 默认是 console 子系统 使用 windows...windows下的资源文件 .rc (比如给程序添加图标) MVSC 中使用 rc.exe 对 .rc 文件进行处理 MinGW 中使用 windres.exe 处理 .rc 文件 qmake TARGET...只是: MinGW 下仅仅这么做还不行,上面的 MinGW 块用来修复这个问题 Debug 与 Release qmake 使用 qmake 时,可以在 pro 文件内分别为两种模式设置不同的选项...使用时,可以直接 make release 或 make debug 来编译不同的版本 cmake 不同于 qmake,由于 cmake 采用 out-of-source 方式。
Qmake的TEMPLATE变量用来设置Qt项目的构建类型。
在我们编译别人发送的项目时,有时候会出现qmake编译失败的情况,那怎么办?
在qt/mkspecs中的每一个目录里面,都有一个包含了平台和编译器特定信息的qmake.conf文件。这些设置适用于你要使用qmake的任何项目,请不要修改它,除非你是一个专家。...模板 模板变量告诉qmake为这个应用程序生成哪种makefile。下面是可供使用的选择: app - 建立一个应用程序的makefile。这是默认值,所以如果模板没有被指定,这个将被使用。...“app”模板 “app”模板告诉qmake为建立一个应用程序生成一个makefile。当使用这个模板时,下面这些qmake系统变量是被承认的。...你只需要使用那些你已经有值的系统变量,例如,如果你不需要任何额外的INCLUDEPATH,那么你就不需要指定它,qmake会为所需的提供默认值。...“=”,否则qmake就不能正确使用连编Qt的设置了,比如没法获得所编译的Qt库的类型了。
例如,项目文件中显示了当前使用和测试linux-g++的规范: message($$QMAKESPEC) linux-g++ { message(Linux) } 只要mkspecs目录中存在规范...捆绑的构建过程也受到QMAKE_BUNDLE_DATA变量内容的影响。 以下选项仅在Linux/Unix平台上有效: 选项 描述 largefile 包括对大文件的支持。...这仅受某些平台(目前基于Linux和Darwin的平台)的支持,可通过检查是否设置QMAKE_REL_RPATH_BASE来检测。...例如: UNAME = $$system(uname -s) contains( UNAME, [lL]inux ):message( This looks like Linux ($$UNAME) to...例如: if(linux-g++*|macx-g++*):CONFIG(debug, debug|release) { message("We are on Linux or Mac OS, and
领取专属 10元无门槛券
手把手带您无忧上云