【问题标题】:Build multiple versions of a binary with qmake使用 qmake 构建二进制文件的多个版本
【发布时间】:2019-09-06 08:30:59
【问题描述】:

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

【问题讨论】:

  • this 你在找什么吗?
  • 我不确定它会起作用。只是一个想法。您可能有一组 makefile,每个都指定自己的配置并调用 make-f 选项来指定要使用的 makefile。
  • @NguyenCong 这就是我已经在做的事情了。
  • @vahancho 这确实是一种可能性......通过qmake自动重建makefile,它实际上可以工作。你会对此做出完整的回答吗?不过,它看起来像个 hack :-)...

标签: c++ qt qmake


【解决方案1】:

最自然的方式,IMO,是源外构建。也就是说,创建一个名为“sanitizer”的子目录,进入其中,并以与 cmakemeson 等相同的方式构建您的 Makefile:

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

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

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

【讨论】:

  • 这也很巧妙,我完全没有意识到这种可能性。
  • @VincentFourmond 好吧,事实上,两者之间没有太大区别。只有两种方法可以告诉 qmake 你想要一个外源构建。
  • 这是最实用的方法,因为我只需要 cd 到正确的目录
【解决方案2】:

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

~ qmake -o ./normal/Makefile

创建一个普通版本,并且:

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

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

~ make -f ./normal/Makefile

~ make -f ./sanitizer/Makefile

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

【讨论】:

  • 是的,这就是工作。我还没有接受,因为这不是我所要求的,但如果没有其他答案出现,我会在几天内接受。谢谢!
猜你喜欢
  • 2010-12-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-12-01
  • 2016-08-04
  • 1970-01-01
  • 2014-02-14
  • 1970-01-01
相关资源
最近更新 更多