2017-06-23 60 views
0

我最近开始刷新我的C++知识(有10年没有使用它了)。我选择使用QtCreator,因为我想了解更多关于Qt的知识,我只尝试过一次。将QMake项目转换为CMake

现在,我创建了一个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 += 

我不喜欢拿“即插即用”的解决方案一般,但在此之前我潜入cmake的,我想有这样的转变,并能够建立它。

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

我已经在Build &中增加了CMake运行 - > CMake(它是自动检测的)。

+0

'我不喜欢拿“即插即用”解决方案通常,但是......“ - 我们也不喜欢这样的问题。你有没有试过在提问之前搜索堆栈溢出?已经有[8个问题]([cmake] [qmake]转换)关于QT-> CMake转换。 – Tsyvarev

回答

1

用于Qt编程的qmake和cmake的区别在于qmake现在已经可以找到Qt库和源。 CMake不知道,你可能有指向图书馆的正确位置。通常你会声明一个环境变量QT_DIR。我会把使用QT5一个例子,因为我忘了如何在cmake的

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) 

创建的Qt4项目对于一个简单的项目,这样的脚本将服务。

QtCreator已经有cmake的项目的支持,你只需要使用的CMakeLists.txt打开里面的文件夹和IDE将识别为一个cmake的项目

+0

可爱,谢谢。这似乎很简单,只是一个关于.pro文件'QT + = core gui'的第一行的小问题。我在cmake文件中没有看到任何引用,这是否意味着它可以被省略?实际上这是Qt5(5.8)项目。所以我理解的'QT5_DIR'应该为每个项目配置?或者我可以将它配置为“套件”(选项 - >构建和运行 - >套件)。我没有检查我的项目构建环境,看来我的系统环境已经定义了QTDIR。这足够吗? – user1970395

+0

当你包含Qt5Widgets时,Qt5Core和Qt5Gui是包含在Qt5Widgets需要的。 必须在OS环境变量中配置QT5_DIR。另一个选项是指向脚本中的正确位置,但这有点复杂 –

+0

感谢您的解释。那么,我认为QTDIR(它确实指向Qt5.8 for gcc)已经在Qt框架安装过程中设置了,所以有一件事要少做:)我会明天尝试一下,如果一切顺利,请将您的答案标记为正确对。一个额外的问题,如果我可以 - 是否有任何方法可以让QtCreator中的同一项目与qmake或cmake一起编译而不关闭项目(例如,通过使用单独的构建和运行配置),还是需要关闭我的项目并打开项目.pro或CMakeLists.txt分别使用qmake或cmake? – user1970395