使用 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" 的子目录,进入其中,并按照与 cmake
、meson
等相同的方式构建 Makefile:
mkdir sanitizer
cd sanitizer
qmake CONFIG+=sanitizer ../Qsoas.pro
QMake 原生支持源外构建,所以一切都应该没问题。但是,如果您需要区分源目录和构建目录,可以使用变量 $$PWD
和 $$OUT_PWD
.
另请参阅 qmake 手册,了解 shadowed() 自动转换路径的功能。
我想构建我的程序的两个版本,一个 "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" 的子目录,进入其中,并按照与 cmake
、meson
等相同的方式构建 Makefile:
mkdir sanitizer
cd sanitizer
qmake CONFIG+=sanitizer ../Qsoas.pro
QMake 原生支持源外构建,所以一切都应该没问题。但是,如果您需要区分源目录和构建目录,可以使用变量 $$PWD
和 $$OUT_PWD
.
另请参阅 qmake 手册,了解 shadowed() 自动转换路径的功能。