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



我想构建我的程序的两个版本,一个是"普通"版本,另一个是已激活地址清理器的版本。截至目前,我的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

IMO最自然的方式是源外构建。也就是说,创建一个名为"sanitizer"的子目录,进入它,然后像使用cmakemeson等一样构建您的 Makefile:

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

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

另请参阅qmake的手册,用于自动转换路径的shadowed((函数。

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

~ qmake -o ./normal/Makefile

创建普通版本,并且:

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

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

~ make -f ./normal/Makefile

~ make -f ./sanitizer/Makefile

以构建替代版本。 希望这会起作用。

最新更新