【问题标题】:Can Qmake accept custom arguments?Qmake 可以接受自定义参数吗?
【发布时间】:2013-02-20 06:34:01
【问题描述】:

我已经在一个名为 RoboJournal 的程序上工作了一段时间,我正在尝试简化 Debian 源包的创建。当用户在 Linux 上构建程序时,qmake 将安装路径设置为 /usr/local/bin(对于用户编译的程序应该如此)但是,当我创建 Debian 源包时,这会导致问题,因为所有打包的可执行文件应该安装到/usr/bin。

解决此问题的最简单方法是在制作源代码包之前手动编辑安装路径,但我更愿意保持代码库相同(具有相同版本号的代码库的多个变体最终总会导致问题)。

如果包维护者可以运行 qmake --package robojournal.pro 之类的东西来创建具有正确安装路径的 makefile 用于打包目的,那就太好了。同时,省略--package 参数仍将允许用户创建常规构建。

可以这样做(或类似的事情)吗?我检查了 qmake 文档,但我没有发现任何关于配置项目文件以允许 qmake 接受自定义 Unix 样式参数的内容。

【问题讨论】:

    标签: qt qmake


    【解决方案1】:

    您可以使用CONFIG variable 来实现您所需要的。任何内容都可以添加到 CONFIG 变量中,并且 CONFIG 变量中指定的每个选项都可以用作范围条件:

    package {
        message(Creating a makefile with the correct install path for packaging purposes...)
    } else {
        message(Creating a regular build...)
    }
    

    这为您提供了一种方便的方式来自定义项目文件和微调生成的 Makefile。见Configuration and Scopes

    CONFIG 保存的值列表可以在命令行上扩展。您可以使用或不使用“CONFIG+=package”运行 qmake:

    qmake "CONFIG+=package" robojournal.pro
    
    qmake robojournal.pro
    

    Makefile Mode Options

    【讨论】:

    • 我也可以指定LIBS 和/或INCLUDEPATH 参数吗?如果是这样,我该如何处理需要引号的路径?
    • @Troyseph 为什么要在命令行中指定LIBSINCLUDEPATH 参数?听起来很奇怪。
    • 长话短说,我向你保证是临时措施!我在 QtCreator qmake buld 步骤中管理它,在路径周围使用单引号,在每个 XXX+=Y Y Y 周围使用双引号
    【解决方案2】:

    默认情况下,qmake 会生成空的 installunistall 目标,除非您指示 qmake 进行显式安装。

    例如项目文件

    TEMPLATE = app
    TARGET = test
    DEPENDPATH += .
    INCLUDEPATH += .
    
    SOURCES += main.cpp
    

    生成以下 Makefile(仅显示安装部分以节省空间)

    ####### Install
    
    install:   FORCE
    
    uninstall:   FORCE
    
    FORCE:
    

    那么Qt项目文件中的以下规则将指定安装路径

    unix {
        target.path = /usr/bin/
    
        INSTALLS += target
    }
    

    现在 Makefile 已经改变了

    ####### Install
    
    install_target: first FORCE
        @$(CHK_DIR_EXISTS) $(INSTALL_ROOT)/usr/bin/ || $(MKDIR) $(INSTALL_ROOT)/usr/bin/ 
    -$(INSTALL_PROGRAM) "$(QMAKE_TARGET)" "$(INSTALL_ROOT)/usr/bin/$(QMAKE_TARGET)"
    
    uninstall_target:  FORCE
        -$(DEL_FILE) "$(INSTALL_ROOT)/usr/bin/$(QMAKE_TARGET)"
    -$(DEL_DIR) $(INSTALL_ROOT)/usr/bin/ 
    
    install:  install_target  FORCE
    
    uninstall: uninstall_target   FORCE
    
    FORCE:
    

    这是来自 robojournal.pro 的部分:

    target.path = /usr/local/bin
    
    INSTALLS += target shortcut icon shortcut-deb icon-deb
    

    最终用户极不可能编译应用程序。甚至像我一样会编译它的人也不会安装它,因为它可以从构建目录启动。因此,将 /usr/local/bin 替换为 /usr/bin 是安全的。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-12-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-10-01
      相关资源
      最近更新 更多