使用 qmake 构建多个版本的二进制文件

Build multiple versions of a binary with qmake

我想构建我的程序的两个版本,一个 "normal" 版本,一个已激活地址清理器的版本。截至目前,我的 QSoas.pro

中有这个
sanitizer {
  message("Activating the address sanitizer code")
  OBJECTS_DIR = build-snt
  QMAKE_CXXFLAGS += -fno-omit-frame-pointer -fsanitize=address
  LIBS += -fsanitize=address
  TARGET = $$join(TARGET,,,-snt)
}

这样,我可以做到:

~ qmake
~ make

获得普通版,

~ qmake CONFIG+=sanitizer
~ make

获取带有地址清理器的版本。

这很好,但有点麻烦,特别是因为我实际上需要 qmake 命令行上的许多其他配置选项。有没有办法有两个目标,这样我就可以简单地 运行

~ qmake
~ make
~ make my-sanitized-exe

这是我关于如何实现所需行为的建议。这个想法是使用两个(或更多)不同的 Makefile 来告诉 make 工具要做什么。要创建一组 Makefile,我会这样做(大致):

~ qmake -o ./normal/Makefile

创建普通版本,并且:

~ qmake CONFIG+=sanitizer -o ./sanitizer/Makefile

为消毒剂创建 Makefile。 现在,如果我想构建一个普通版本,我调用:

~ make -f ./normal/Makefile

~ make -f ./sanitizer/Makefile

构建替代版本。 希望这会奏效。

在我看来,最自然的方式是外源构建。也就是说,创建一个名为 "sanitizer" 的子目录,进入其中,并按照与 cmakemeson 等相同的方式构建 Makefile:

mkdir sanitizer
cd sanitizer
qmake CONFIG+=sanitizer ../Qsoas.pro

QMake 原生支持源外构建,所以一切都应该没问题。但是,如果您需要区分源目录和构建目录,可以使用变量 $$PWD$$OUT_PWD.

另请参阅 qmake 手册,了解 shadowed() 自动转换路径的功能。