CMake+qt+Visual Studio

本文介绍了如何在qtCreator中创建CMake项目,包括设置CMakeLists.txt、自动查找文件、生成VisualStudio解决方案文件(sln)以及在VisualStudio中管理和编译的过程。同时提到使用cmake_gui管理和自动化编译步骤。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

#使用qt Creator 创建Cmake 项目,使用Cmake Gui 生成sln 工程,使用Visual Studio 开发

##使用qt Creator 创建CMake项目  

  和创建pro工程的步骤一致,只是在选择构建系统的步骤上选择CMake,接下来步骤完全相同

工程新建完成之后,构建cmake 项目,保证项目被正确的构建。

  在qt creator 自动生成的CMakeLists.txt 上做了修改,添加了自动寻找头文件、源文件和ui文件

当前文件夹是CMakeLists.txt 的同级目录

cmake_minimum_required(VERSION 3.5)

project(cmakeTest VERSION 0.1 LANGUAGES CXX)

set(CMAKE_AUTOUIC ON)
set(CMAKE_AUTOMOC ON)
set(CMAKE_AUTORCC ON)

set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED ON)

find_package(QT NAMES Qt6 Qt5 REQUIRED COMPONENTS Widgets)
find_package(Qt${QT_VERSION_MAJOR} REQUIRED COMPONENTS Widgets)


#添加源文件 头文件 和ui文件
FILE(GLOB SRC_FILES "./*.cpp" "../cmakeTest_Build/*.cpp")
FILE(GLOB HEAD_FILES "./*.h" "./cmakeTest_Build/*.h")
FILE(GLOB UI_FILES "./*.ui" "../cmakeTest_Build/*.ui")
#可以不设置
#qt5_wrap_ui(WRAP_UI ${UI_FILES})

if(${QT_VERSION_MAJOR} GREATER_EQUAL 6)
    qt_add_executable(cmakeTest
        MANUAL_FINALIZATION
       ${HEAD_FILES}
       ${SRC_FILES}
   
    )
# Define target properties for Android with Qt 6 as:
#    set_property(TARGET cmakeTest APPEND PROPERTY QT_ANDROID_PACKAGE_SOURCE_DIR
#                 ${CMAKE_CURRENT_SOURCE_DIR}/android)
# For more information, see https://doc.qt.io/qt-6/qt-add-executable.html#target-creation
else()
    if(ANDROID)
        add_library(cmakeTest SHARED
             ${HEAD_FILES}
            ${SRC_FILES}
            ${UI_FILES}
        )
# Define properties for Android with Qt 5 after find_package() calls as:
#    set(ANDROID_PACKAGE_SOURCE_DIR "${CMAKE_CURRENT_SOURCE_DIR}/android")
    else()
        add_executable(cmakeTest
            ${HEAD_FILES}
            ${SRC_FILES}
            ${UI_FILES}
        
        )
    endif()
endif()

target_link_libraries(cmakeTest PRIVATE Qt${QT_VERSION_MAJOR}::Widgets)

# Qt for iOS sets MACOSX_BUNDLE_GUI_IDENTIFIER automatically since Qt 6.1.
# If you are developing for iOS or macOS you should consider setting an
# explicit, fixed bundle identifier manually though.
if(${QT_VERSION} VERSION_LESS 6.1.0)
  set(BUNDLE_ID_OPTION MACOSX_BUNDLE_GUI_IDENTIFIER com.example.cmakeTest)
endif()
set_target_properties(cmakeTest PROPERTIES
    ${BUNDLE_ID_OPTION}
    MACOSX_BUNDLE_BUNDLE_VERSION ${PROJECT_VERSION}
    MACOSX_BUNDLE_SHORT_VERSION_STRING ${PROJECT_VERSION_MAJOR}.${PROJECT_VERSION_MINOR}
    MACOSX_BUNDLE TRUE
    WIN32_EXECUTABLE TRUE
)

include(GNUInstallDirs)
install(TARGETS cmakeTest
    BUNDLE DESTINATION .
    LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
    RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
)

if(QT_VERSION_MAJOR EQUAL 6)
    qt_finalize_executable(cmakeTest)
endif()


##使用cmake_gui 构建出sln 工程

依次操作1,2,3,4

1.设置CMakeLists.txt 所在的目录

2.设置build 目录 生成visual studio 可以打开的sln,以及整个项目的构建过程

3.configure 配置visual studio 工具,选择生成的平台,(点击之后如果有红色在5处出现,再次点击config,直到消失,如果是下方的空白处有红色就需要根据提示修改CMakeLists.txt文件)

4.configure 完成之后 点击Generate 

操作完成!!!

##使用visual studio 打开cmake 构建目录下的sln 文件,解决 方案资源管理器中有好几个项目选择指定的工程名的项目作为启动项,否在编译会出现

设置启动项之后成功运行。

##在visual studio 项目中添加文件,添加文件设置文件的位置和CMakeLists.txt同一级目录,方便拷贝代码。添加完成之后,运行会提示ui_XX.h 找到不到 

重复 cmake_gui 构建出sln 工程 的3,4 步骤,visual 提示

点击全部重新加载,点击运行成功编译.

添加文件每次都需要使用cmake 重新构建,暂时没有找到好的方法

add: 在CMakeLists.txt的上一级目录添加.bat 脚本

rem @echo 不显示命令在命令行窗口上 echo 显示
echo off
rem 改批处理文件

rem 获取批处理文件的名称(不包括路劲)
set "file_name=%~nx0"
rem 去除批处理文件的后缀
for %%F in ("%file_name%") do set "file_name_no_ext=%%~nF"

set "file_name_build=%file_name_no_ext%_build"
rem :: 表示当前行为注释 不执行
::delete %file_name_build% 
if "%1"=="delete" goto _DEL


if not exist %file_name_build% md %file_name_build%
cd %file_name_build%
cmake -A Win32 -DCMAKE_CONFIGURATION_TYPES=Release ../%file_name_no_ext%
cd ..
goto _END
echo %file_name_no_ext%

:_DEL
rd /S /Q %file_name_build%



:_END
pause

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值