我一直在研究一个名为RoboJournal的程序,我正在尝试简化为Debian创建源程序包的过程。当用户在Linux上构建程序时,qmake将安装路径设置为/ usr / local / bin(对于用户编译的程序应该如此)但是,当我创建Debian源包时,这会导致问题,因为所有打包的可执行文件应该安装到/ usr / bin。
解决此问题的最简单方法是在制作源程序包之前手动编辑安装路径,但我更希望保持代码库相同(具有相同版本号的代码库的多个变体最终会导致问题)。
如果软件包维护者可以运行qmake --package robojournal.pro
之类的东西来创建一个带有正确安装路径的makefile以进行打包,那将是很棒的。同时,省略--package
参数仍然允许用户创建常规构建。
这可以(或类似的东西)完成吗?我已经检查了qmake文档但是我没有发现配置项目文件以允许qmake接受自定义Unix风格的参数。
答案 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
答案 1 :(得分:1)
默认情况下,qmake
会生成空的install
和unistall
目标,除非您指示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是安全的。