如何将 CLion (1.2.4) 用于涉及 Qt Creator 的项目?
How can I use CLion (1.2.4) for a project involving Qt Creator?
Qt Creator 使 GUI 创建变得异常简单,但我宁愿使用 CLion 进行编码部分,而只使用 Qt Creator 进行 GUI 编辑。
绝对有可能!
我正在使用 mac,所以我所做的一些事情在其他操作系统上并不完全相同。它们是一些小而简单的东西,google-fu 应该相对轻松地解决。
第 1 步:创建 Qt Creator 项目
我将在本示例中使用小部件应用程序。稍后我会接触到其他类型的项目。
我强烈推荐的一件事是将构建目录(在边栏的“项目”选项卡下)更改为相对路径而不是绝对路径,尤其是在进入 GitHub 或喜欢。我把它改成 ./QtBinDebug
.
哦,记得复制或以其他方式将 main.cpp
的内容保存在单独的位置以备后用。
Qt 就这些了。从现在开始,我们应该只需要在编辑我们的 GUI 时使用 Qt Creator。
第 2 步:在 CLion 中打开项目
CLion 需要创建一些文件才能与我们的项目一起工作。告诉 CLion 创建一个新项目,但将项目命名为与我们在 Qt Creator 中创建的项目完全相同的名称,并将 CLion 指向相同的路径。它应该警告您有关文件已经存在的信息,请忽略它。
CLion 将非常有帮助地覆盖 main.cpp
。把你从 QtCreator 复制的东西放回去。
第 3 步:调用正确的 Makefile
Qt Creator 实际上会生成它自己的 makefile,它将调用 qmake,并执行一大堆其他魔术。太疯狂了...我可以用
替换现有的 CMakeLists.txt
cmake_minimum_required(VERSION 3.3)
project(WindowTest)
set(QT_BIN "${PROJECT_SOURCE_DIR}/QtBinDebug")
add_custom_target(qtMakeFile COMMAND make -C ${QT_BIN})
这将完美地构建项目!唯一的问题是 CLion
目前仅支持 CMake 项目。上面的 CMakeLists 通过告诉 CMake 在正确的 makefile 上调用 make
来解决这个问题,但是 IDE 本身不知道如何解释我们的代码......
第 4 步:找出 Qt 库的安装位置
我通过 Homebrew 安装了 Qt,并在 /usr/local/Cellar/qt5/5.5.1_2/lib/cmake
找到了我需要的库。如果你告诉 Homebrew link 安装,/usr/local/opt/qt5/lib/cmake
也可以工作,并且有额外的好处让你的 Qt 版本保持最新而无需更改任何东西!
第 5 步:链接到 CLion 的 Qt 库
如果您像我一样,您更愿意使用 CLion,因为它会自动完成所有内容并且不会到处都显示红色文本。
我们需要告诉 CLion 去哪里寻找它丢失的库。对于基本的 Widgets 项目,我需要 Qt5Core
和 Qt5Widgets
。要确定您需要什么,请检查生成的 Qt Creator 生成文件。您应该在 LIBS
macro.
顶部附近找到您需要的内容
对于 linking,我们将使用 find_package(...)
和 target_link_libraries(...)
命令。虽然我们可以将所有内容硬编码到这两个命令中,但我认为将其分解一点是个好主意。
另一个小细节是 Qt Creator 放置在构建目录中的头文件。对于骨架小部件项目,它是 ui_mainwindow.h
。我们可以使用 include_directories(...)
命令告诉 CLion 去哪里查看。
我的CMakeLists.txt
:
cmake_minimum_required(VERSION 3.3)
project(WindowTest)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11")
#Base QT directory
set(QT_PATH "/usr/local/opt/qt5")
#Build output path of your QT Creator project
set(QT_BIN "${PROJECT_SOURCE_DIR}/QtBinDebug")
#Qt5 paths
#Qt5 library path
set(QT5_LIB_DIR ${QT_PATH}/lib/cmake)
#Qt5 individual libraries
set(QT5_CORE ${QT_LIB_DIR}/Qt5Core)
set(QT5_WIDGETS ${QT_LIB_DIR}/Qt5Widgets)
set(QT5_GUI ${QT_LIB_DIR}/Qt5Gui)
#Libraries to link to. The :: is for convenience
set(QT_LIBRARIES Qt5::Core Qt5::Widgets Qt5::Gui)
#Libraries required. Probably the same as above minus the '::'. find_package() will be called on these
set(QT_LIBRARIES_REQUIRED Qt5Core Qt5Widgets Qt5Gui)
#find packages
foreach(QT_LIBRARIES_REQUIRED ${QT_LIBRARIES_REQUIRED})
find_package( ${QT_LIBRARIES_REQUIRED} REQUIRED )
endforeach()
add_custom_target(qtMakefile COMMAND make -C ${QT_BIN})
include_directories(${QT_BIN})
set(SOURCE_FILES main.cpp mainwindow.cpp mainwindow.h mainwindow.ui)
add_executable(WindowTest ${SOURCE_FILES})
target_link_libraries(${PROJECT_NAME} ${QT_LIBRARIES})
第 6 步:设置 CLion 以实际 运行 正确
运行 配置菜单中应该会弹出一个配置。对我来说,上面的 CMake 文件是 qtMakefile。我们需要对那个目标做最后一件事,所以点击 "Edit configurations..."
我们需要 select CLion 在构建后应该 运行 的可执行文件。在可执行文件部分,单击 "Select other..." 和 select 小部件的可执行文件。我的在 QtBinDebug/WindowTest.app/Contents/MacOS/WindowTest
.
就是这样!恭喜!
缺点
调试无效。调试器没有 link 在我放入测试程序中的简单 hello world 上。不过老实说,我真的不想掉进那个兔子洞。
优点
自动完成 wazoo
Qt Creator 使 GUI 创建变得异常简单,但我宁愿使用 CLion 进行编码部分,而只使用 Qt Creator 进行 GUI 编辑。
绝对有可能!
我正在使用 mac,所以我所做的一些事情在其他操作系统上并不完全相同。它们是一些小而简单的东西,google-fu 应该相对轻松地解决。
第 1 步:创建 Qt Creator 项目
我将在本示例中使用小部件应用程序。稍后我会接触到其他类型的项目。
我强烈推荐的一件事是将构建目录(在边栏的“项目”选项卡下)更改为相对路径而不是绝对路径,尤其是在进入 GitHub 或喜欢。我把它改成 ./QtBinDebug
.
哦,记得复制或以其他方式将 main.cpp
的内容保存在单独的位置以备后用。
Qt 就这些了。从现在开始,我们应该只需要在编辑我们的 GUI 时使用 Qt Creator。
第 2 步:在 CLion 中打开项目
CLion 需要创建一些文件才能与我们的项目一起工作。告诉 CLion 创建一个新项目,但将项目命名为与我们在 Qt Creator 中创建的项目完全相同的名称,并将 CLion 指向相同的路径。它应该警告您有关文件已经存在的信息,请忽略它。
CLion 将非常有帮助地覆盖 main.cpp
。把你从 QtCreator 复制的东西放回去。
第 3 步:调用正确的 Makefile
Qt Creator 实际上会生成它自己的 makefile,它将调用 qmake,并执行一大堆其他魔术。太疯狂了...我可以用
替换现有的CMakeLists.txt
cmake_minimum_required(VERSION 3.3)
project(WindowTest)
set(QT_BIN "${PROJECT_SOURCE_DIR}/QtBinDebug")
add_custom_target(qtMakeFile COMMAND make -C ${QT_BIN})
这将完美地构建项目!唯一的问题是 CLion
目前仅支持 CMake 项目。上面的 CMakeLists 通过告诉 CMake 在正确的 makefile 上调用 make
来解决这个问题,但是 IDE 本身不知道如何解释我们的代码......
第 4 步:找出 Qt 库的安装位置
我通过 Homebrew 安装了 Qt,并在 /usr/local/Cellar/qt5/5.5.1_2/lib/cmake
找到了我需要的库。如果你告诉 Homebrew link 安装,/usr/local/opt/qt5/lib/cmake
也可以工作,并且有额外的好处让你的 Qt 版本保持最新而无需更改任何东西!
第 5 步:链接到 CLion 的 Qt 库
如果您像我一样,您更愿意使用 CLion,因为它会自动完成所有内容并且不会到处都显示红色文本。
我们需要告诉 CLion 去哪里寻找它丢失的库。对于基本的 Widgets 项目,我需要 Qt5Core
和 Qt5Widgets
。要确定您需要什么,请检查生成的 Qt Creator 生成文件。您应该在 LIBS
macro.
对于 linking,我们将使用 find_package(...)
和 target_link_libraries(...)
命令。虽然我们可以将所有内容硬编码到这两个命令中,但我认为将其分解一点是个好主意。
另一个小细节是 Qt Creator 放置在构建目录中的头文件。对于骨架小部件项目,它是 ui_mainwindow.h
。我们可以使用 include_directories(...)
命令告诉 CLion 去哪里查看。
我的CMakeLists.txt
:
cmake_minimum_required(VERSION 3.3)
project(WindowTest)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11")
#Base QT directory
set(QT_PATH "/usr/local/opt/qt5")
#Build output path of your QT Creator project
set(QT_BIN "${PROJECT_SOURCE_DIR}/QtBinDebug")
#Qt5 paths
#Qt5 library path
set(QT5_LIB_DIR ${QT_PATH}/lib/cmake)
#Qt5 individual libraries
set(QT5_CORE ${QT_LIB_DIR}/Qt5Core)
set(QT5_WIDGETS ${QT_LIB_DIR}/Qt5Widgets)
set(QT5_GUI ${QT_LIB_DIR}/Qt5Gui)
#Libraries to link to. The :: is for convenience
set(QT_LIBRARIES Qt5::Core Qt5::Widgets Qt5::Gui)
#Libraries required. Probably the same as above minus the '::'. find_package() will be called on these
set(QT_LIBRARIES_REQUIRED Qt5Core Qt5Widgets Qt5Gui)
#find packages
foreach(QT_LIBRARIES_REQUIRED ${QT_LIBRARIES_REQUIRED})
find_package( ${QT_LIBRARIES_REQUIRED} REQUIRED )
endforeach()
add_custom_target(qtMakefile COMMAND make -C ${QT_BIN})
include_directories(${QT_BIN})
set(SOURCE_FILES main.cpp mainwindow.cpp mainwindow.h mainwindow.ui)
add_executable(WindowTest ${SOURCE_FILES})
target_link_libraries(${PROJECT_NAME} ${QT_LIBRARIES})
第 6 步:设置 CLion 以实际 运行 正确
运行 配置菜单中应该会弹出一个配置。对我来说,上面的 CMake 文件是 qtMakefile。我们需要对那个目标做最后一件事,所以点击 "Edit configurations..."
我们需要 select CLion 在构建后应该 运行 的可执行文件。在可执行文件部分,单击 "Select other..." 和 select 小部件的可执行文件。我的在 QtBinDebug/WindowTest.app/Contents/MacOS/WindowTest
.
就是这样!恭喜!
缺点
调试无效。调试器没有 link 在我放入测试程序中的简单 hello world 上。不过老实说,我真的不想掉进那个兔子洞。
优点
自动完成 wazoo