5

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

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

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

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

4

2 回答 2

9

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

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

这为您提供了一种方便的方式来自定义项目文件和微调生成的 Makefile。请参阅配置和范围

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

qmake "CONFIG+=package" robojournal.pro

qmake robojournal.pro

请参阅Makefile 模式选项

于 2013-02-20T07:32:26.953 回答
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

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

于 2013-02-23T07:39:43.313 回答