我目前在我的Qt应用程序中使用C++ 11功能.但是,我想在我的应用程序中使用一些新的C++ 14特性.
要在Qt应用程序中启用C++ 11,只需在qmake项目文件中添加一行,即:
CONFIG += c++11
Run Code Online (Sandbox Code Playgroud)
或者对于早期版本:
QMAKE_CXXFLAGS += -std=c++1y
Run Code Online (Sandbox Code Playgroud)
我已经尝试用C++ 14做同样的事情,但它没有用.我改变了上面提到的qmake项目的行,如下所示:
CONFIG += c++14
Run Code Online (Sandbox Code Playgroud)
或者对于早期版本:
QMAKE_CXXFLAGS += -std=c++1y
Run Code Online (Sandbox Code Playgroud)
之后,在尝试构建项目时出现了许多以前不存在的编译错误.该项目编译良好,但是,如果我尝试使用任何C++ 14功能,我会收到编译错误.这是一个例子:
template<typename T>
constexpr T pi = T(3.1415926535897932385);
Run Code Online (Sandbox Code Playgroud)
这是相应的错误:
main.cpp:7: error: template declaration of 'constexpr const T pi'
constexpr T pi = T(3.1415926535897932385);
^
Run Code Online (Sandbox Code Playgroud)
在QtCreator中使用qmake项目时如何启用C++ 14功能?
我使用的是Qt 5.3.2,Qt Creator 3.2.1和MinGW 4.8.2 32位.
过去几天我在Qt论坛和谷歌上搜索了很多,但我找不到任何明显的答案.
我找到了-prefix可以提供配置来指定不同安装目录的选项(甚至没有记录在Windows上),但这根本不清楚源和二进制文件的分离,因为构建仍然在源目录中完成,然后安装所需的文件将复制到安装程序.我尝试了这个-prefix选项,并遇到了一些问题.(即它不会将.pdb文件复制到安装目录.)
然后我找到了关于进行阴影构建的这个链接,但它有一个很大的限制,即构建目录必须与源目录处于同一级别.
我猜你没试过make install?所以试试吧.它应该将Qt安装到远离源的单独目录中.
你是说我配置后,我应该做nmake安装而不是nmake?我知道nmake将处理来自qmake的生成的makefile并将它们放在源Qt目录中,但是nmake install将完全做什么,即在哪个目录中安装文件以及如何指定文件的安装目录.
请注意,我已经这样做了:
configure -prefix builddir -platform win32-msvc2005
nmake install
Run Code Online (Sandbox Code Playgroud)
上面两行的效果是qt是在源目录中编译的,而不是直接编译到我用前缀指定的builddir.然后编译的文件被复制到我的builddir中.我希望能够将我的Qt文件直接构建到构建目录,因为这样我在编译期间需要4 Gb空间用于源代码.此外,pdb文件未复制到我的buildir,这是另一个问题.
我想在我的makefile(和)中使用-O1而不是-O2来进行我的Linux构建,但是我对如何基于.pro文件生成这些makefile的理解有些缺乏.这是因为当存在-O2时,Qt的版本与我使用的G ++版本相结合具有不稳定性.CFLAGSCXXFLAGS
目前,在运行qmake之后,我正在运行替换脚本,这样做:
sed -i 's/\-O2/\-O1/g' AllProjects/Makefile.Release
Run Code Online (Sandbox Code Playgroud)
这是一个贫民窟的解决方案.一个更好的解决方案是修改.pro文件以某种方式传递这些指令.我不确定如何生成CFLAGS和CXXFLAGS,我想我会问精彩的StackOverflow.
我试过传递一个
linux-g++-{
CFLAGS += -O1
CXXFLAGS += -O1
CONFIG += -O1
}
Run Code Online (Sandbox Code Playgroud)
这没用.
我正在尝试将Qt用于学校的项目,但遇到了问题.我开始关注教程,我遇到了Makefile问题.大多数教程说要运行qmake -project,然后是qmake最后make.但是当我尝试这个时,我遇到了错误,make: *** No targets specified and no makefile found. Stop.我真的不太了解Makefiles.有人能指点我正确的方向吗?
使用qmake,您可以轻松更改,以便构建调试版本或发行版本.只需修改CONFIG var并更改编译标志即可.
CONFIG += debug
CONFIG += release
Run Code Online (Sandbox Code Playgroud)
当您使用调试时,您将获得-g而不进行优化,并且当您使用release时,您将获得-O2并且没有调试信息(没有-g).
但是指定的是哪里?
让我们说我希望我的应用程序可以通过优化大小来构建,-Os?如何更改"发布"背后的内容?
谢谢
.pro如果我想执行chmod命令,执行输出二进制文件或执行其他操作,我必须对文件进行哪些更改.
我安装了多个版本的Qt,我需要用所有这些版本编译我的项目.
使用专业文件,我在文档中找不到如何进行条件编译.
理想情况下,这就是我想要做的事情:
QT_VERSION = 5 # this can be 4, set manually
if(QT_VERSION == 5) {
QT += widgets
}
if(QT_VERSION == 4) {
QT += gui
}
Run Code Online (Sandbox Code Playgroud)
当然,pro文件中不存在if()命令.
有没有更好的方法来做同样的事情?
我在qmake项目中遇到了包含问题.在我的.pro文件中,我得到了:
INCLUDEPATH += "C:\OpenCV\build\include"
Run Code Online (Sandbox Code Playgroud)
在我的cpp中:
#include <opencv\cv.h>
Run Code Online (Sandbox Code Playgroud)
编译器指示错误:
无法打开包含文件:'opencv\cv.h':没有这样的文件或目录
但如果我在我的cpp中写这个:
#include "C:\OpenCV\build\include\opencv\cv.h"
Run Code Online (Sandbox Code Playgroud)
有用!
我在Qt Creator中构建项目.我究竟做错了什么?
如何在Qt中指定具有不同配置的多个目标?有没有办法在一个.pro文件中执行此操作?
例如,我想构建以下2个.pro文件(无需每次都手动更改.pro文件):
targetA:
QT += network
TEMPLATE = app
SOURCES += main.cpp \
mainwindow.cpp
HEADERS += mainwindow.h
FORMS += mainwindow.ui
RESOURCES += resource.qrc
TARGET = targetA
DEFINES += PARAMA
Run Code Online (Sandbox Code Playgroud)
targetB:
QT += network
TEMPLATE = app
SOURCES += main.cpp \
mainwindow.cpp
HEADERS += mainwindow.h
FORMS += mainwindow.ui
RESOURCES += resource.qrc
TARGET = targetB
DEFINES += PARAMB
Run Code Online (Sandbox Code Playgroud) 我最近重新编译了Qt,以便我可以使用静态而不是共享库.但是现在,当我尝试编译我的项目时,我收到以下错误:
QMAKESPEC尚未设置,因此无法推断配置.
这似乎是一个常见的问题,我在发布之前做了一些研究.让我感到困惑的是,我确实设置了QMAKESPEC env var.这是printenv QMAKESPEC的输出
/usr/local/Trolltech/Qt-4.4.0/mkspecs/linux-g++
此外,这是qmake -query QMAKESPEC的输出
Linux的克++
我也试过玩这些值,但似乎qmake根本看不到那个变量...... QTDIR也被正确指定了.
我也尝试重新编译Qt并重新安装它.
谢谢你的帮助.