【问题标题】:How to convert qmake to cmake?如何将 qmake 转换为 cmake?
【发布时间】:2017-10-01 11:37:09
【问题描述】:

我的项目中有一个.pro 文件,但现在我想将它移植到一个CMakeLists.txt 文件中。我怎样才能做到这一点?

QT += core
QT -= gui
CONFIG += c++11
TARGET = test
CONFIG += console
CONFIG -= app_bundle
TEMPLATE = app
QT += network
SOURCES += main.cpp \
    test_interface.cpp \
    motomanlibrary.cpp \
    processing.cpp
SOURCES += main.cpp \
    test_interface.h \
    motomanlibrary.h \
    processing.h

【问题讨论】:

标签: qt cmake qmake


【解决方案1】:

QMake:所需的库。

QT += core
QT -= gui
QT += network

CMake:只需要添加。不需要排除 (QT -= gui)。

find_package(Qt5Core REQUIRED)
find_package(Qt5Network REQUIRED)

QMake:附加编译器标志:

CONFIG += c++11

CMake:根据需要扩展编译器标志列表。

set(CMAKE_CXX_FLAGS  "${CMAKE_CXX_FLAGS} -std=c++0x")

QMake:源文件

SOURCES += main.cpp \
    test_interface.cpp \
    motomanlibrary.cpp \
    processing.cpp

CMake:创建源文件列表

set(SOURCES
    main.cpp
    test_interface.cpp
    motomanlibrary.cpp
    processing.cpp
)

QMake:要包含的标头:

SOURCES += main.cpp \
    test_interface.h \
    motomanlibrary.h \
    processing.h

CMake:只显示头文件的位置。

include_directory(.) #  or include_directory(${CMAKE_CURRENT_SOURCE_DIR})
include_directory(some/where/else)

QMake:要构建的目标:

TARGET = test

CMake:设置目标的名称,添加源,链接所需的库。

add_executable(test ${SOURCES} )
qt5_use_modules(test Core Network) # This macro depends from the Qt version

# Should not be necessary
#CONFIG += console
#CONFIG -= app_bundle
#TEMPLATE = app

Convert qmake to cmake上查看更多详情

【讨论】:

【解决方案2】:

在 Qt Base 的 WIP 分支上有一个 python 脚本可以将 QMake 转换为 CMake:https://code.qt.io/cgit/qt/qtbase.git/tree/util/cmake/pro2cmake.py?h=wip/cmake

当 CMake 成为主要的构建系统时,它可能会与 Qt 6 一起发布。

【讨论】:

  • 由于处于 alpha 阶段,我没有使用它。我想它可以通过解析所有 .pro.pri 并将 QMake 关键字转换为 CMake 来工作。我认为对于简单的项目它可以很好地工作,但是当您开始使用 .pro 的多个模块以及可能像 QtCreator 这样的自动依赖关系解析器时,它可能会失败!
  • 我为这个模块找到了一个小wiki,但不是很详细,见cmets。
  • 在我的情况下pro2cmake.py 有无限循环。原来它需要.qmake.conf,为了绕过这个限制,pro2cmake.py:find_qmake_conf 中的 while-loop 必须修改为在cwd 是根时立即停止(我刚刚检查了之前的 CWD 是否与 @987654329 的当前相同@ 循环外)。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多