我已经看到了几个建议,但没有任何真正对我有用的东西.我只需要将文件复制到所需的目标目录.
比如说,从这个回答:
install_it.path = %{buildDir}
install_it.files += %{sourceDir}/settings.ini
INSTALLS += install_it
Run Code Online (Sandbox Code Playgroud)
变量%{buildDir}和%{sourceDir}应界定,以使这项工作.好吧,没问题%{sourceDir}:它只是..但我怎么能得到%{buildDir}?
EDIT1
说,我my_project这里有一个项目:
/path/to/my_project
因此,释放的构建路径是这样的:/path/to/my_project-build-Desktop-release,
调试构建路径是这样的: /path/to/my_project-build-Desktop-debug
我有文件要复制到目标目录: /path/to/my_project/copy_to_install_dir
因此,我希望在发布版本时/path/to/my_project/copy_to_install_dir将所有文件复制到/path/to/my_project-build-Desktop-release.而且,调试构建的方式相同.
我找不到包含完整目标路径的变量,即/path/to/my_project-build-Desktop-release用于调试构建.
以防万一:我使用Windows,但无论如何我正在寻找跨平台解决方案.
EDIT2
准确的解决方案,面向未来的读者:
install_it.path = $$OUT_PWD
install_it.files = copy_to_install_dir/*
INSTALLS += \
install_it
Run Code Online (Sandbox Code Playgroud) Qmake项目文件中是否有"win64"标识符?Qt Qmake高级文档除了unix/macx/win32之外没有提及.
到目前为止,我已尝试使用:
win32:message("using win32")
win64:message("using win64")
amd64:message("using amd64")
Run Code Online (Sandbox Code Playgroud)
结果总是"使用win32".
我必须为x32和x64项目使用单独的项目文件,因此它们会针对正确的库进行编译吗?有没有其他方法可以识别32位和64位环境?
我正在使用Qt Creator并拥有一个依赖于C++静态库项目的Qt GUI项目.我想将GUI应用程序的发布版本与.lib的发布版本以及带有调试.lib的GUI应用程序的调试版本链接起来.我已经找到了如何通过在我的.pro文件中包含如下所示的行来向项目中添加其他库:
LIBS += -L./libfolder -lmylib.lib
但是我看不出如何使用不同的-L命令来发布和调试版本.
qmake是否有支持这样做?
这是一个新手问题.我正在尝试将OpenCV库添加到QT项目中.
这个问题说链接标志是由
pkg-config --libs opencv
Run Code Online (Sandbox Code Playgroud)
如果我将命令行输出粘贴到项目文件中,如:
LIBS += -L/usr/local/lib -lml -lcvaux -lhighgui -lcv -lcxcore
Run Code Online (Sandbox Code Playgroud)
然后一切都很好,但现在这不便携.我怎样才能简单地引用命令的输出?
更新:尝试过Ken Bloom的建议,但不会编译.实际生成的编译器命令是
# How it should be, at least on my machine
g++ -o QOpenCVTest main.o qopencvtest.o moc_qopencvtest.o -L/usr/lib -L/usr/local/lib -lml -lcvaux -lhighgui -lcv -lcxcore -lQtGui -lQtCore -lpthread
# with CONFIG and PKGCONFIG
g++ -o QOpenCVTest main.o qopencvtest.o moc_qopencvtest.o -L/usr/lib -lQtGui -lQtCore -lpthread
Run Code Online (Sandbox Code Playgroud) 有没有办法在"Release with Debug info"模式下构建Qt?我的应用程序仅在"发布"模式下崩溃(在调试模式下工作正常),似乎问题来自Qt(可能是Qt中的错误).所以我想看看Qt的调试信息.
Qt docs有"debug","release"但不是"release with debug"模式.
[Upate]
我的应用程序适用于Mingw 32位Release/Debug和VSC++ Compiler 64bit Debug.
仅在VSC++ 64Bit Release上崩溃
有小费吗 ?
假设我有一个Qt应用程序,我在两个不同的命名空间中有两个具有相同名称的类:
namespace namespace1
{
class SomeClass;
}
namespace namespace2
{
class SomeClass;
}
Run Code Online (Sandbox Code Playgroud)
我根据它有一个项目目录结构:
-->src/
-->namespace1/
-->someclass.cpp
-->namespace2/
-->someclass.cpp
Run Code Online (Sandbox Code Playgroud)
当我使用qmake编译应用程序时,它将所有对象(.o)文件放在一个目录中 - 所以它首先创建someclass.o文件然后用第二个someclass.o重写它- 这是一个名称冲突所以它很糟糕.
为什么qmake没有考虑源文件的目录结构?为什么它不会创建像namespace1_someclass.o和namespace2_someclass.o这样的东西?
是的,我可以将我的类放到一个目录中,并将它们命名为namespace1_someclass.cpp和namespace2_someclass.cpp,并且不会发生名称冲突,但这会在查看Qt Creator中项目资源管理器中的源文件时造成很少的不便,因为当有在项目中有很多源文件,它的可读性远远低于我可以展开或折叠的目录结构.
另一个极端是拥有如下目录结构:
-->src/
-->namespace1/
-->namespace1_someclass.cpp
-->namespace2/
-->namespace2_someclass.cpp
Run Code Online (Sandbox Code Playgroud)
它解决了名称冲突,但它冗余地复制了命名空间名称 - 因此再次不太可读.
为什么qmake至少没有根据源文件将目标文件放到目录结构中的选项?Qt的创造者不知道这是一个重要的特征吗?
还有一件事 - 你可以建议我使用cmake工具而不是qmake,但是我发现使用cmake 要比qmake 困难得多,而qmake到目前为止它的工作非常出色 - 除了对象文件的放置.
我想pro通过QtCreator 为文件中的Mac OS设置一些配置.我阅读了该文档,发现它支持Windows和Unix,如下所示,
win32 {
SOURCES += hellowin.cpp
}
unix {
SOURCES += hellounix.cpp
}
Run Code Online (Sandbox Code Playgroud)
我知道Mac OS是类似nix的操作系统,但是,我仍然希望与Linux有所不同.有没有办法做到这一点?
Ubuntu + Qt5.1
为了简化这种情况,我们假设有2个文件:core.cpp和main.cpp.
core.cpp包含程序的功能并main.cpp包含基本main()实现.
我想要Qt(使用qmake和.pro文件)
core.a,然后main.cpp建立main.exe.如何在qmake文件中进行设置?
有关如何创建预构建步骤的SO有几个问题qmake,我可以在我的.pro文件中执行此操作:
versionTarget.target = ../VersionData/versioning.h
versionTarget.depends = FORCE
win32: versionTarget.commands = cd $$PWD; python.exe ./version_getter.py -p $$TARGET
else: versionTarget.commands = cd $$PWD; python ./version_getter.py -p $$TARGET
PRE_TARGETDEPS += ../VersionData/versioning.h
QMAKE_EXTRA_TARGETS += versionTarget
Run Code Online (Sandbox Code Playgroud)
现在,问题是这种方法本身不是构建步骤,而只是另一个构建目标,所以如果我-j为其配置了标志,make则与其他构建作业并行运行我的脚本.这非常糟糕,因为我的脚本创建/更新了一个头文件 - 让它在编译过程中改变是不可接受的.
那么,无论如何我可以在任何编译运行之前执行此脚本吗?我知道我可以创建另一个脚本,并调用version_getter.py并qmake从该序列,但是这是不可取的,因为我将不得不在命令行而不是Qt Creator的范围内进行编译.
.pri每个子项目包含的完整文件如下:
CONFIG += thread
QT += core \
gui
versionTarget.target = ../VersionData/versioning.h
versionTarget.depends = FORCE
win32: versionTarget.commands = cd $$PWD; python.exe ./version_getter.py -p $$TARGET
else: versionTarget.commands …Run Code Online (Sandbox Code Playgroud) 我目前在我的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位.