So I just setup a new Cmake project with Qt Creator. Then I added some classes to the project and Qt Creator is displaying the files as follows:
Now when I add a header file (New File > C++ Header File) only ( without a source file), the header file is not displayed in the project tree that Qt Creator shows (I can't find it under Header Files). I can see that the header file is being created (using Ctrl+K) but it is not showing under Header Files. I have read another question here but the main answer provided doesn't really answer the question.
My CMakeslist.txt
looks as the following:
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)
You need to add the header to the sources list in CMake. In your case
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()
Tip: You might want to consider to put your sources in their own variable like so:
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()
It pays off when the project gets more complex.
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.