将QMake项目转换为CMake

pza*_*zaj 1 c++ qt qmake cmake

我最近开始刷新我的C ++知识(大约十年没有使用它了)。我选择使用QtCreator,因为我想学习更多关于Qt的知识,而我只尝试了一次。

现在,我创建了一个qmake项目,并且一切正常,但是我还想了解cmake,因此我想到了将项目转换为cmake的目的。

不幸的是,我与C ++的构建过程有关的知识很少,由于我的项目很小,所以我通常只是让IDE为我处理所有这些事情。

现在,我想请您帮助我将qmake .pro文件移动到cmake CMakeLists.txt,这非常简单。

QT       += core gui

greaterThan(QT_MAJOR_VERSION, 4): QT += widgets

TARGET = model_view_playground
TEMPLATE = app

DEFINES += QT_DEPRECATED_WARNINGS

QMAKE_CXXFLAGS += -std=c++0x

SOURCES += main.cpp\
        mainwindow.cpp \
    testitemlistmodel.cpp

HEADERS  += mainwindow.h \
    testclass.h \
    testitemlistmodel.h

FORMS    += mainwindow.ui

DISTFILES +=
Run Code Online (Sandbox Code Playgroud)

我通常不希望获得“即插即用”的解决方案,但是在深入研究cmake之前,我希望将其转换并能够构建它。

至于构建,这是一个不同的问题,但也许有人也可以回答这个问题-我是否需要在QtCreator中进行任何更改以使其在我的项目中使用cmake而不是qmake(或者理想情况下将它们并排放置)能够在cmake和qmake之间切换)?

我已经在Build&Run-> CMake中添加了CMake(已自动检测到)。

小智 5

Qmake编程的qmake和cmake之间的区别在于qmake已经知道在哪里可以找到Qt库和源代码。CMake不知道这一点,您可能已指向库的正确位置。通常,您将声明一个环境变量QT_DIR。我将使用Qt5作为示例,因为我忘记了如何在cmake中创建Qt4项目。

project(Qt5Project) # Your project name

set(CMAKE_CXX_STANDARD 11) # This is equal to QMAKE_CXX_FLAGS += -std=c++0x

# Find includes in corresponding build directories
set(CMAKE_INCLUDE_CURRENT_DIR ON)
# Instruct CMake to run moc automatically when needed.
set(CMAKE_AUTOMOC ON)
# Instruct CMake to run uic automatically when needed.
set(CMAKE_AUTOUIC ON)

# This will find the Qt5 files. You will need a QT5_DIR env variable
find_package(Qt5Widgets REQUIRED) # Equivalent of QT += widgets

set(SOURCES main.cpp mainwindow.cpp testitemlistmodel.cpp) 
set(HEADERS mainwindow.h testclass.h testitemlistmodel.h)
set(UI mainwindow.ui)

# This will create you executable
add_executable(model_view_playground ${SOURCES} ${HEADERS} ${UI})
# This will link necessary Qt5 libraries to your project
target_link_libraries(model_view_playground Qt5::Widgets)
Run Code Online (Sandbox Code Playgroud)

对于一个简单的项目,将使用这样的脚本。

QtCreator已经支持cmake项目,您只需要打开其中包含CMakeLists.txt的文件夹,IDE就会将其识别为cmake项目。