【问题标题】:Qt5 CMake can't find C++ STD library if a definition is added in CMakeLists.txt如果在 CMakeLists.txt 中添加定义,Qt5 CMake 找不到 C++ STD 库
【发布时间】:2021-06-27 06:41:27
【问题描述】:

这是我正在努力解决的问题。

我正在使用 CMake 构建我的 Qt5 GUI 项目。我正在使用来自 GitHub 的自定义模块 QML-material project。 问题在于,正如项目文档中所说 - 为了为您的项目设置模块,您应该添加一个定义:

add_definitions("-DQPM_INIT\(E\)=E.addImportPath\(QStringLiteral\(\"qrc:/\"\)\)\;")

但如果在 CMakeLists.txt 中添加此定义,项目将找不到 C++ STD 库。如果我将其注释掉,则可以再次使用 STD 功能。

关于定义含义。

这个宏基本上调用 addImportPath("qec:/") 到它被调用的参数。就我而言,它在 main() 中:

// Working example
QQmlApplicationEngine engine;
QPM_INIT(engine);

但如果我只是更改它并直接调用 addImportPath 并删除定义,它不会找到自定义 QML 模块。

// Not working example
QQmlApplicationEngine engine;
engine.addImportPath(QStringLiteral("qrc:/"));

我的问题:

  • 为什么 CMake 中的定义会阻止项目与 STD 库的链接?
  • 为什么如果我用 main() 函数中的表示替换宏,它不起作用?
  • 有没有人建议如何同时使用自定义模块和 STD 库?

注意! Qt 库仍然可见。问题仅在于 STD。

【问题讨论】:

    标签: c++ qt cmake qt5 definition


    【解决方案1】:

    大多数编译器不容忍函数定义。使用 add_definition 添加这样的宏是一种解决方法,因为它将宏添加到 CXX_FLAGS,而不是 CXX_DEFINES,但显然它也无法正常工作。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-10-02
      • 1970-01-01
      • 2021-03-23
      • 2018-05-18
      • 2020-04-10
      相关资源
      最近更新 更多