Qmake可以接受自定义参数吗?

时间:2013-02-20 06:34:01

标签: qt qmake

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

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

如果软件包维护者可以运行qmake --package robojournal.pro之类的东西来创建一个带有正确安装路径的makefile以进行打包,那将是很棒的。同时,省略--package参数仍然允许用户创建常规构建。

这可以(或类似的东西)完成吗?我已经检查了qmake文档但是我没有发现配置项目文件以允许qmake接受自定义Unix风格的参数。

2 个答案:

答案 0 :(得分:9)

您可以使用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

答案 1 :(得分:1)

默认情况下,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

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