如何使用cmake在linux中构建Qt项目(How to build Qt project in linux with cmake)

我使用的是ubuntu 14.04,cmake 2.8.12.2,Qt5.6.2(内置版本),GNU make 3.81

用cmake PathToSource -G "Eclipse CDT4 - Unix Makefiles"运行cmake之后

我做的。 我得到#error "You must build your code with position independent code if Qt was built with -reduce-relocations. " "Compile your code with -fPIC (-fPIE is not enough)." # error "You must build your code with position independent code if Qt was built with -reduce-relocations. "\ #error "You must build your code with position independent code if Qt was built with -reduce-relocations. " "Compile your code with -fPIC (-fPIE is not enough)." # error "You must build your code with position independent code if Qt was built with -reduce-relocations. "\

然后我下载Qt5.7.0源文件,构建并安装它没有问题。 我再做cmake PathToSource -G "Eclipse CDT4 - Unix Makefiles" ,制作它。 我收到很多错误,比如/home/sflee/Documents/Software_dev/3rd_party/Qt5.7.0/include/QtCore/qhash.h:957:10: error: 'pair' does not name a type auto pair = qAsConst(*this).equal_range(akey); 和/home/sflee/Documents/Software_dev/3rd_party/Qt5.7.0/include/QtCore/qbasicatomic.h:285:14: error: 'Ops' has not been declared { return Ops::fetchAndAddRelease(_q_value, valueToAdd); } /home/sflee/Documents/Software_dev/3rd_party/Qt5.7.0/include/QtCore/qbasicatomic.h:285:14: error: 'Ops' has not been declared { return Ops::fetchAndAddRelease(_q_value, valueToAdd); }

怎么解决?

I am using ubuntu 14.04, cmake 2.8.12.2, Qt5.6.2 (a built version), GNU make 3.81

After I run cmake with cmake PathToSource -G "Eclipse CDT4 - Unix Makefiles"

I do make. I get #error "You must build your code with position independent code if Qt was built with -reduce-relocations. " "Compile your code with -fPIC (-fPIE is not enough)." # error "You must build your code with position independent code if Qt was built with -reduce-relocations. "\

I then download source file of Qt5.7.0, build and install it without problem. I do again cmake PathToSource -G "Eclipse CDT4 - Unix Makefiles", make it. I get many errors, such as /home/sflee/Documents/Software_dev/3rd_party/Qt5.7.0/include/QtCore/qhash.h:957:10: error: ‘pair’ does not name a type auto pair = qAsConst(*this).equal_range(akey); and /home/sflee/Documents/Software_dev/3rd_party/Qt5.7.0/include/QtCore/qbasicatomic.h:285:14: error: ‘Ops’ has not been declared { return Ops::fetchAndAddRelease(_q_value, valueToAdd); }

How to solve it?

原文:https://stackoverflow.com/questions/40316244

更新时间:2020-07-05 07:07

最满意答案

Qt 5.7需要C ++ 11编译器。 如果你从auto pair得到那种错误,听起来你的编译器没有编译C ++ 11代码。 有两个可能的原因:

你只需要将-std=c++11传递给你的编译器,正如这个问题所解释的那样 。

你有太旧的编译器。 但是,由于您使用相同的编译器编译Qt 5.7本身,这对您来说应该不是问题。

Qt 5.7 requires C++11 compiler. If you get that kind of error from auto pair, it sounds like your compiler is not compiling C++11 code. There are two possible reasons:

You just need to pass -std=c++11 to your compiler, as explaned under this question.

You have too old compiler. However, since you compiled Qt 5.7 itself with the same compiler, this shouldn't be the problem for you.

2017-05-23

相关问答

你的脚本有几个错误,还有一些东西可以改进。 更改后,它将如下所示: cmake_minimum_required(VERSION 3.0.2)

project(MyProject)

find_package(Qt5Widgets)

set(CMAKE_AUTOMOC ON)

set(CMAKE_AUTOUIC ON)

set(CMAKE_INCLUDE_CURRENT_DIR ON)

add_library(mainwindow mainwindow.cpp)

target_link_lib

...

要在CMakeLists.txt中使用Qt5 ,您应该使用(组合)这些函数: 在顶级CMakeLists.txt中 #### Qt5

find_package( Qt5Core REQUIRED )

find_package( Qt5Widgets REQUIRED )

find_package( Qt5Gui REQUIRED )

find_package( Qt5OpenGL REQUIRED )

find_package( Qt5Multimedia REQUIRED )

find_pack

...

首先,如果要进行适当的依赖关系处理,请明确列出要包含的文件,替换file(GLOB ...) 。 这还将确保构建正在为您期望的文件集创建依赖关系。 除了下面的原因, 这个答案还有更多关于你可能想要这样做的细节。 AUTOUIC的CMake文档包括以下声明: 如果找到与ui_.h匹配的预处理程序#include指令,并且存在.ui文件,则将执行uic以生成相应的文件。 您能否确认您的.cpp源代码具有遵循此模式的#include指令? 在您的file(GLOB

...

CMake生成顺序是根据文件和目标之间的依赖关系计算的。 如果您的qt库依赖于.ui文件生成的标头,那么您必须在目标qt输入中添加${qt_UI_H} : QT5_WRAP_UI(qt_UI_H ${qt_UI})

[...]

add_library(qt "${DIR_SRC}/qt/form_main.cpp" ${qt_UI_H})

在编译libqt之前,CMake通常应该在.ui文件上执行UIC 顺便说一句,使用target_link_libraries只在链接时设置目标之间的依赖关系。

...

这不是cmake问题,而是使用about.cpp文件损坏。 由于某种原因,它有流浪的角色。 解决方案是“uncorrupt it”,然后它将使用相同的cmake文件。 This is not a cmake issue, but corruption with your about.cpp file. It has got stray characters for one reason or another. The solution is "uncorrupt it", and then it

...

将qt5添加到CMakeLists.txt与qt4不同,你可以找到许多这样的有用链接,顺便说一下我的ubuntu的版本是12.04并且我安装了没有apt-get的qt,我使用这种格式在我的cmakelists中查找qt。文本 : find_package(Qt5Widgets)

include_directories(${Qt5Widgets_INCLUDES}

/opt/Qt5.0.2/5.0.2/gcc/include/QtGui

/opt/Qt5.0.2/5.0.2/gcc/include

...

我认为你是这个bug的受害者(仍未解决)。 我不是100%确定出了什么问题,但你可以在评论中找到一些想法。 I think you're a victim of this bug (still unsolved). I'm not 100% sure of what's going wrong, but you can find some ideas in the comments.

您可以在Qt Creator中使用或不使用Qt,使用或不使用C ++编译器,使用或不使用cmake二进制文件等。 Qt Creator使用工具包作为(多个)项目中一起使用的东西的集合,因此您不必一次又一次地定义这些相同的设置。 套件中可用的设置取决于您启用的插件,如果未设置某些信息,Creator非常高兴 - 只要您正在处理的项目不需要此信息。 因此,如果你打开一个基于qmake的项目,如果一个工具包没有设置Qt版本(这是提供qmake二进制文件),创建者会抱怨。 如果您尝试打开基于cmake的项

...

您需要使用CMAKE_PREFIX_PATH 。 例如: cmake.exe -DCMAKE_PREFIX_PATH="C:/path/to/Qt/5.X/compiler/lib/cmake"

You need to use CMAKE_PREFIX_PATH. For example: cmake.exe -DCMAKE_PREFIX_PATH="C:/path/to/Qt/5.X/compiler/lib/cmake"

Qt 5.7需要C ++ 11编译器。 如果你从auto pair得到那种错误,听起来你的编译器没有编译C ++ 11代码。 有两个可能的原因: 你只需要将-std=c++11传递给你的编译器,正如这个问题所解释的那样 。 你有太旧的编译器。 但是,由于您使用相同的编译器编译Qt 5.7本身,这对您来说应该不是问题。 Qt 5.7 requires C++11 compiler. If you get that kind of error from auto pair, it sounds lik

...

Linux使用cmake编译项目,如何使用cmake在linux中构建Qt项目(How to build Qt project in linux with cmake)...相关推荐

  1. 在gradle中构建java项目

    文章目录 简介 构建java项目的两大插件 管理依赖 编译代码 管理resource 打包和发布 生成javadoc 简介 之前的文章我们讲到了gradle的基本使用,使用gradle的最终目的就是为 ...

  2. PHP项目部署在tomcat,在Tomcat中部署Web项目的操作方法(必看篇)

    在这里介绍在Tomcat中部署web项目的三种方式: 1.部署解包的webapp目录 2.打包的war文件 3.Manager Web应用程序 一:部署解包的webapp目录 将Web项目部署到Tom ...

  3. 分布式计算Hadoop系列之如何Eclipse中构建Hadoop项目

    前言 之前根据Hadoop官方文档对HDFS.MapReduce的架构.配置管理等进行了学习,但某些地方官方文档讲解的比较模糊.做过开发的人都能够体会,官方文档有些类似业务规则或者要求,而真正的细节还 ...

  4. 计算机在语文教学中的用场,项目教学法在计算机基础教学中的应用:项目教学 语文教学法...

    摘要:在当今信息化社会的进程中,计算机的使用已经变得越来越普及,而计算机的普及教育在整个社会中也变得越来越重要.在中职学校的<计算机基础>课程的教学中实施项目教学,可以充分调动学生的学习积 ...

  5. cmake编译多个文件夹_cmake多目录构建(二)

    前言 上一篇文章从如何构建只有一个源文件扩展到多个源文件,多个目录的构建语法,以及如何进行外部构建(out-of-source).这里回忆一下,每次构建都会生成一个CMakeFiles文件夹,当执行m ...

  6. 02-eclipse中构建ant项目和编译运行ant

    Eclipse中已经集成了Ant,我们可以直接在Eclipse中运行Ant. 1.用 Ant 来构建简单系统 新建一个 Java project, 命名为Hello Hello .java 文件内容 ...

  7. java项目导入jre不识别_Eclipse中的Java项目:无法解析类型java.lang.Object。 从所需的.class文件间接引用它...

    在Eclipse中导入项目后出现以下错误: The type java.lang.Object cannot be resolved. It is indirectly referenced from ...

  8. 怎么在linux下用mysql建库_在MySQL/MariaDB中创建数据库、数据库用户和授予特权(针对Linux平台)...

    在本文中,将学习MySQL/MariaDB数据库创建.数据库用户创建以及如何向用户授予权限,方法针对Linux平台.安装数据库请参考为CentOS 8操作系统安装MySQL的方法,以安装MySQL 8 ...

  9. Windows 10 上使用 CMake GUI 编译 Krita 源代码并使用 MinGW 64 作为构建工具

    krita系列文章目录 提示:这里可以添加系列文章的所有文章的目录,目录需要自己手动添加 例如:第一章 Python 机器学习入门之pandas的使用 提示:写完文章后,目录可以自动生成,如何生成可参 ...

  10. c 远程编辑linux文件,makefile - 在远程Linux机器上编译C ++ - “检测到时钟偏差”警告...

    makefile - 在远程Linux机器上编译C ++ - "检测到时钟偏差"警告 我通过PuTTY和WinSCP连接到我大学的小型Linux集群,使用后者传输文件,并使用前者编 ...

最新文章

  1. HTML的标签描述6
  2. 【FPGA】单端口RAM的设计(同步读、同步写)
  3. 智能循迹避障小车C语言程序编写思路,设计一个循迹避障一体的智能小车的资料和代码及电路图详细概述...
  4. 华农oj Problem K: 负2进制【有技巧构造/待补】
  5. java开发区块链只需150行代码
  6. C# switch语句中,可以放哪些类型
  7. SpringBoot集成Cache缓存(Redis缓存,RedisTemplate方式)
  8. 在matlab环境中实现图像的傅里叶变换,matlab用傅里叶变换实现图像的低通滤波
  9. [C++] C/C++ 取整函数ceil(),floor()
  10. c语言注释部分两侧的分界符号分别是,C语言习题及解答.doc
  11. 均值定理四个公式_中考数学几何题,就考这140多条公式定理!
  12. win安装appium
  13. 汇编语言 masm5与debug命令使用方法 小结
  14. 流刷新函数:fflush()的介绍和用法
  15. CISC和RISC的区别
  16. word的页脚页码从9开始后面全是1,怎么解决?
  17. centos7 离线安装 rar 解压缩软件
  18. Java项目论文+PPT+源码等]基于javaweb的网上订餐管理系统|点餐餐饮餐厅
  19. 缓和曲线09正弦一波型
  20. LimeSDR实验教程(10) DVB-S发射和接收

热门文章

  1. unity, undo
  2. open×××+Mysql+PAM构建强大的***系统
  3. Silverlight与Flash在FF中的一些注意点
  4. linux 命令速查手册之十
  5. python直接连接oracle_python连接oracle
  6. python 查询包_查找Python包的依赖包(语句)
  7. .net 导出excel_Qt编写的项目作品18-数据导出到Excel及Pdf和打印数据
  8. mysql多实例安装启动_MySQL多实例安装启动
  9. [转载] Python学习:Python成员运算符和身份运算符
  10. chown –r mysql:mysql,mysql部署,操作及异常处理