使用 Cmake 在 Qt Creator 中显示头文件

Display header files in Qt Creator using Cmake

本文关键字:显示 文件 Creator Cmake Qt 使用      更新时间:2023-10-16

所以我只是用Qt Creator设置了一个新的Cmake项目。然后我向项目添加了一些类,Qt Creator显示文件如下:

  • 项目文件夹
    • 项目名称
      • 源文件
    • 头文件

现在,当我仅添加头文件(新文件> C++头文件(时(没有源文件(,头文件不会显示在Qt Creator显示的项目树中(我在头文件下找不到它(。我可以看到正在创建头文件(使用 Ctrl+K(,但它没有显示在头文件下。 我在这里读过另一个问题,但提供的主要答案并没有真正回答这个问题。

我的CMakeslist.txt如下所示:

cmake_minimum_required(VERSION 3.5)
project(TEST LANGUAGES CXX)
set(CMAKE_INCLUDE_CURRENT_DIR ON)
set(CMAKE_AUTOUIC ON)
set(CMAKE_AUTOMOC ON)
set(CMAKE_AUTORCC ON)
set(CMAKE_CXX_STANDARD 11)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
# QtCreator supports the following variables for Android, which are identical to qmake Android variables.
# Check http://doc.qt.io/qt-5/deployment-android.html for more information.
# They need to be set before the find_package(Qt5 ...) call.
#if(ANDROID)
#    set(ANDROID_PACKAGE_SOURCE_DIR "${CMAKE_CURRENT_SOURCE_DIR}/android")
#    if (ANDROID_ABI STREQUAL "armeabi-v7a")
#        set(ANDROID_EXTRA_LIBS
#            ${CMAKE_CURRENT_SOURCE_DIR}/path/to/libcrypto.so
#            ${CMAKE_CURRENT_SOURCE_DIR}/path/to/libssl.so)
#    endif()
#endif()

find_package(Qt5 COMPONENTS Core Quick REQUIRED)
if(ANDROID)
add_library(TEST SHARED
main.cpp
wetcanvas.cpp
wetrenderer.cpp
qml.qrc
)
else()
add_executable(TEST
main.cpp
wetcanvas.cpp
wetrenderer.cpp
qml.qrc
)
endif()
target_compile_definitions(TEST
PRIVATE $<$<OR:$<CONFIG:Debug>,$<CONFIG:RelWithDebInfo>>:QT_QML_DEBUG>)
target_link_libraries(TEST
PRIVATE Qt5::Core Qt5::Quick)

您需要将标头添加到 CMake 中的源列表中。 在您的情况下

if(ANDROID)
add_library(TEST SHARED
main.cpp
wetcanvas.cpp
wetrenderer.cpp
MyHeader.h
qml.qrc
)
else()
add_executable(TEST
main.cpp
wetcanvas.cpp
wetrenderer.cpp
MyHeader.h
qml.qrc
)
endif()

提示: 您可能需要考虑将源放在它们自己的变量中,如下所示:

set(COMMON_SRC
main.cpp
wetcanvas.cpp
wetrenderer.cpp
MyHeader.h
qml.qrc
)
set(ANDROID_SRC
AndroidSpecific.cpp
AndroidSpecific.h
)
if(ANDROID)
add_library(TEST SHARED
${COMMON_SRC}
${ANDROID_SRC}
)   
else()
add_executable(TEST
${COMMON_SRC}
)
endif()

当项目变得更加复杂时,它会得到回报。