我想构建我的程序的两个版本,一个是"普通"版本,另一个是已激活地址清理器的版本。截至目前,我的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"的子目录,进入它,然后像使用cmake
、meson
等一样构建您的 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
以构建替代版本。 希望这会起作用。