【问题标题】:qmake is enabling both clang++ and g++ at the same timeqmake 同时启用 clang++ 和 g++
【发布时间】:2015-10-04 18:22:11
【问题描述】:

不管我的 .pro 文件内容如何,​​clang++ 和 g++ 都会继续使用:

linux-clang++
{
    message("Using clang++")
    QMAKE_CXXFLAGS += -Weverything
}
linux-g++
{
    message("Using g++")
    QMAKE_CXXFLAGS += -Wall -Wextra
}

我还尝试根据 qmake 文档检查 QMAKE_CXXcontains(QMAKE_CXX, clang++)equals(QMAKE_CXX = clang++),但无论如何我都会得到相同的输出:

Project MESSAGE: Using clang++
Project MESSAGE: Using g++

message($$QMAKESPEC) 输出Project MESSAGE: /usr/lib/qt/mkspecs/linux-g++,构建设置也显示-spec linux-g++,但它似乎一直在启用clang。

反之亦然:将我在 QtCreator 中的默认编译器更改为 clang,并设置 QMAKE_CXX = clang++ 导致 g++ 仍在使用。

只能假设我在某处遗漏了什么?

【问题讨论】:

  • qmake 为您生成了多少个 Makefile?它们里面有什么?
  • 根据需要只生成了1个makefile,一切正常(-spec linux-g++等)。这可以在构建之前检测到;编辑 .pro 文件并保存,qtcreator 自动解析并输出两条消息。即使添加equals(QMAKE_CXX, "blah"),它仍然会进入它的作用域。

标签: c++ linux qt-creator qmake


【解决方案1】:

我刚刚想通了。花括号必须与语句保持在同一行,否则 qmake 会将其解释为始终正确的空白语句。

例如,我测试过:

linux-clang++
{
    message("linux-clang++:Using clang++")
}
linux-g++
{
    message("linux-g++:Using g++")
}
equals(QMAKE_CXX, g++)
{
    message("equals:Using g++")
}
equals(QMAKE_CXX, clang++)
{
    message("equals:Using clang++")
}
equals(QMAKE_CXX, "blah")
{
    message("equals:Using blah")
}

这个输出:

Project MESSAGE: linux-clang++:Using clang++
Project MESSAGE: linux-g++:Using g++
Project MESSAGE: equals:Using g++
Project MESSAGE: equals:Using clang++
Project MESSAGE: equals:Using blah

通过上述调整,效果很好:

linux-clang++ {
    message("linux-clang++:Using clang++")
}
linux-g++ {
    message("linux-g++:Using g++")
}
equals(QMAKE_CXX, g++) {
    message("equals:Using g++")
}
equals(QMAKE_CXX, clang++) {
    message("equals:Using clang++")
}
equals(QMAKE_CXX, "blah") {
    message("equals:Using blah")
}

Project MESSAGE: linux-g++:Using g++
Project MESSAGE: equals:Using g++

【讨论】:

  • 使用{...} 的表单是为多行条件内容而设计的 - 对于 single 行我相信条件后面的冒号 :对于单行(在同一行) 的操作就足够了。然而,如果条件 not 为真,也可以跟随/更改结束 } 表单为 } else {(都在同一行)以完成某些操作,并放置 else 操作以相同的方式输出(结束}) - 我不确定是否可以在“if/else”构造中使用单行形式,但在“if/else”构造中使用多行形式.. .
猜你喜欢
  • 1970-01-01
  • 2014-03-11
  • 2013-03-30
  • 1970-01-01
  • 2016-06-19
  • 1970-01-01
  • 1970-01-01
  • 2018-07-21
  • 1970-01-01
相关资源
最近更新 更多