标签: qmake

使用Qt编译项目后,将文件复制到构建目录

我已经看到了几个建议,但没有任何真正对我有用的东西.我只需要将文件复制到所需的目标目录.

比如说,从这个回答:

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)

qt qmake

30
推荐指数
3
解决办法
3万
查看次数

Qmake中win64配置的标识符

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位环境?

windows 64-bit qt qmake qt4

27
推荐指数
3
解决办法
2万
查看次数

使用qmake/Qt Creator链接调试/发布库

我正在使用Qt Creator并拥有一个依赖于C++静态库项目的Qt GUI项目.我想将GUI应用程序的发布版本与.lib的发布版本以及带有调试.lib的GUI应用程序的调试版本链接起来.我已经找到了如何通过在我的.pro文件中包含如下所示的行来向项目中添加其他库:

LIBS += -L./libfolder -lmylib.lib

但是我看不出如何使用不同的-L命令来发布和调试版本.

qmake是否有支持这样做?

c++ qt qmake

25
推荐指数
2
解决办法
2万
查看次数

使用pkg-config输出将库链接到QT项目

这是一个新手问题.我正在尝试将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)

c++ qt qmake

24
推荐指数
3
解决办法
3万
查看次数

在"使用调试信息发布"模式下构建Qt?

有没有办法在"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上崩溃

有小费吗 ?

c++ qt qmake qt4

24
推荐指数
4
解决办法
2万
查看次数

为什么qmake将所有对象(.o)文件放在一个目录中?

假设我有一个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.onamespace2_someclass.o这样的东西?

是的,我可以将我的类放到一个目录中,并将它们命名为namespace1_someclass.cppnamespace2_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到目前为止它的工作非常出色 - 除了对象文件的放置.

c++ qt qmake

24
推荐指数
2
解决办法
3961
查看次数

如何在qmake中指定Mac平台(QtCreator)

我想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

macos qt qmake qt4 qt5

24
推荐指数
2
解决办法
2万
查看次数

如何使用Qt构建静态库和可执行文件?

为了简化这种情况,我们假设有2个文件:core.cppmain.cpp.

core.cpp包含程序的功能并main.cpp包含基本main()实现.

我想要Qt(使用qmake和.pro文件)

  • 先建立core.a,然后
  • 使用它并main.cpp建立main.exe.

如何在qmake文件中进行设置?

c++ qt qmake

23
推荐指数
1
解决办法
3万
查看次数

在任何编译之前的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.pyqmake从该序列,但是这是不可取的,因为我将不得不在命令行而不是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 qmake

23
推荐指数
2
解决办法
2万
查看次数

在构建qmake项目时如何使用C++ 14功能?

我目前在我的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位.

c++ qt qmake c++14

22
推荐指数
3
解决办法
3万
查看次数

标签 统计

qmake ×10

qt ×10

c++ ×6

qt4 ×3

64-bit ×1

c++14 ×1

macos ×1

qt5 ×1

windows ×1