Skip to content
  • Categories
  • Recent
  • Tags
  • Popular
  • Users
  • Groups
  • Search
  • Get Qt Extensions
  • Unsolved
Collapse
Brand Logo
  1. Home
  2. Qt Development
  3. Mobile and Embedded
  4. CMake Generator for IOS/Android projects?
Forum Updated to NodeBB v4.3 + New Features

CMake Generator for IOS/Android projects?

Scheduled Pinned Locked Moved Mobile and Embedded
19 Posts 7 Posters 18.9k Views 1 Watching
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • H Offline
    H Offline
    Hyblade
    wrote on last edited by
    #6

    Here is the (essential) part of the macros:

    @
    macro(ADD_QT_PROJECT target_name qt_resources out_file_path)
    set(PRO_FILE_CONTENT)

    ADDING CONFIG AND TARGET NAME

    QMAKE_ADD_LINE(PRO_FILE_CONTENT "CONFIG += qt c++11 resources" )
    QMAKE_ADD_LINE(PRO_FILE_CONTENT "TARGET = ${target_name}" )
    QMAKE_ADD_LINE(PRO_FILE_CONTENT "QT += core gui network opengl sql svg xml widgets quick declarative" )

    set(TARGET_RC_FILES ${qt_resources})
    QMAKE_ADD_FILES(PRO_FILE_CONTENT TARGET_RC_FILES)

    SETTING UP TARGET TYPE

    get_target_property(TARGET_CMAKE_TYPE ${target_name} TYPE)
    if(${TARGET_CMAKE_TYPE} STREQUAL "EXECUTABLE")
    QMAKE_ADD_LINE(PRO_FILE_CONTENT "TEMPLATE = app")
    else()
    QMAKE_ADD_LINE(PRO_FILE_CONTENT "TEMPLATE = lib")
    endif()

    ADDING LINK SOURCES

    get_target_property(TARGET_SOURCES ${target_name} SOURCES)
    QMAKE_ADD_FILES(PRO_FILE_CONTENT TARGET_SOURCES)

    ADDING INCLUDE DIRECTORIES

    get_target_property(TARGET_INCLUDE_DIRECTORIES ${target_name} INCLUDE_DIRECTORIES)
    QMAKE_ADD_INCLUDE_DIRECTORIES(PRO_FILE_CONTENT TARGET_INCLUDE_DIRECTORIES)

    ADDING LINK DIRECTORIES

    get_property(TARGET_LINK_DIRECTORIES DIRECTORY ${CMAKE_CURRENT_LIST_DIR} PROPERTY LINK_DIRECTORIES)
    QMAKE_ADD_LINK_DIRECTORIES(PRO_FILE_CONTENT TARGET_LINK_DIRECTORIES)

    get_target_property(TARGET_ARCHIVE_OUTPUT_DIRECTORY ${target_name} ARCHIVE_OUTPUT_DIRECTORY)
    get_target_property(TARGET_ARCHIVE_OUTPUT_DIRECTORY_DEBUG ${target_name} ARCHIVE_OUTPUT_DIRECTORY_DEBUG)
    get_target_property(TARGET_ARCHIVE_OUTPUT_DIRECTORY_RELEASE ${target_name} ARCHIVE_OUTPUT_DIRECTORY_RELEASE)
    get_target_property(TARGET_LIBRARY_OUTPUT_DIRECTORY ${target_name} LIBRARY_OUTPUT_DIRECTORY)
    get_target_property(TARGET_LIBRARY_OUTPUT_DIRECTORY_DEBUG ${target_name} LIBRARY_OUTPUT_DIRECTORY_DEBUG)
    get_target_property(TARGET_LIBRARY_OUTPUT_DIRECTORY_RELEASE ${target_name} LIBRARY_OUTPUT_DIRECTORY_RELEASE)

    if(${TARGET_ARCHIVE_OUTPUT_DIRECTORY_DEBUG} STREQUAL "TARGET_ARCHIVE_OUTPUT_DIRECTORY_DEBUG_NOTFOUND")
    QMAKE_ADD_LINK_DIRECTORIES(PRO_FILE_CONTENT TARGET_ARCHIVE_OUTPUT_DIRECTORY_DEBUG)
    endif()
    if(${TARGET_ARCHIVE_OUTPUT_DIRECTORY_RELEASE} STREQUAL "TARGET_ARCHIVE_OUTPUT_DIRECTORY_RELEASE_NOTFOUND")
    QMAKE_ADD_LINK_DIRECTORIES(PRO_FILE_CONTENT TARGET_ARCHIVE_OUTPUT_DIRECTORY_RELEASE)
    endif()
    if(${TARGET_LIBRARY_OUTPUT_DIRECTORY_DEBUG} STREQUAL "TARGET_LIBRARY_OUTPUT_DIRECTORY_DEBUG_NOTFOUND")
    QMAKE_ADD_LINK_DIRECTORIES(PRO_FILE_CONTENT TARGET_LIBRARY_OUTPUT_DIRECTORY_DEBUG)
    endif()
    if(${TARGET_LIBRARY_OUTPUT_DIRECTORY_RELEASE} STREQUAL "TARGET_LIBRARY_OUTPUT_DIRECTORY_RELEASE_NOTFOUND")
    QMAKE_ADD_LINK_DIRECTORIES(PRO_FILE_CONTENT TARGET_LIBRARY_OUTPUT_DIRECTORY_RELEASE)
    endif()

    QMAKE_ADD_LINK_DIRECTORIES(PRO_FILE_CONTENT TARGET_ARCHIVE_OUTPUT_DIRECTORY)
    QMAKE_ADD_LINK_DIRECTORIES(PRO_FILE_CONTENT TARGET_LIBRARY_OUTPUT_DIRECTORY)

    ADDING LINK LIBRARIES

    get_target_property(TARGET_LINK_LIBRARIES ${target_name} LINK_LIBRARIES)
    QMAKE_ADD_TARGET_LINK_LIBRARIES(PRO_FILE_CONTENT TARGET_LINK_LIBRARIES)

    #get_target_property(TARGET_COMPILE_FLAGS ${target_name} COMPILE_FLAGS)
    #PRINT_TARGET_PROPERTY(${target_name} COMPILE_FLAGS)

    #get_target_property(TARGET_COMPILE_DEFINITIONS ${target_name} COMPILE_DEFINITIONS)
    #PRINT_TARGET_PROPERTY(${target_name} COMPILE_DEFINITIONS)

    #get_target_property(TARGET_RESOURCE ${target_name} COMPILE_DEFINITIONS_DEBUG)
    #PRINT_TARGET_PROPERTY(${target_name} COMPILE_DEFINITIONS_DEBUG)

    #get_target_property(TARGET_RESOURCE ${target_name} COMPILE_DEFINITIONS_RELEASE)
    #PRINT_TARGET_PROPERTY(${target_name} COMPILE_DEFINITIONS_RELEASE)

    #get_target_property(TARGET_RESOURCE ${target_name} LINK_FLAGS)
    #PRINT_TARGET_PROPERTY(${target_name} LINK_FLAGS)

    #get_target_property(TARGET_RESOURCE ${target_name} LINK_FLAGS_DEBUG)
    #PRINT_TARGET_PROPERTY(${target_name} LINK_FLAGS_DEBUG)

    #get_target_property(TARGET_RESOURCE ${target_name} LINK_FLAGS_RELEASE)
    #PRINT_TARGET_PROPERTY(${target_name} LINK_FLAGS_RELEASE)

    #get_target_property(TARGET_RESOURCE ${target_name} RESOURCE)
    #PRINT_TARGET_PROPERTY(${target_name} RESOURCE)

    RUNTIME

    get_target_property(TARGET_RUNTIME_OUTPUT_DIRECTORY ${target_name} RUNTIME_OUTPUT_DIRECTORY)
    #QMAKE_ADD_LINE(PRO_FILE_CONTENT "DESTDIR = ${TARGET_RUNTIME_OUTPUT_DIRECTORY}")
    QMAKE_ADD_LINE(PRO_FILE_CONTENT "system(cd ${PROJECT_BINARY_DIR} && make)")
    #QMAKE_ADD_LINE(PRO_FILE_CONTENT "# Please do not modify the following two lines. Required for deployment." )
    #QMAKE_ADD_LINE(PRO_FILE_CONTENT "include(qtquick2applicationviewer/qtquick2applicationviewer.pri)")
    #QMAKE_ADD_LINE(PRO_FILE_CONTENT "qtcAddDeployment()")

    #message(${PRO_FILE_CONTENT})
    file(WRITE ${out_file_path} ${PRO_FILE_CONTENT} )

    endmacro(ADD_QT_PROJECT)
    @

    1 Reply Last reply
    0
    • M Offline
      M Offline
      MattB.au
      wrote on last edited by
      #7

      Hi Hyblade,

      Great to see you've at least created some sort of solution. I'd really be hoping to create a toolchain totally independent from QtCreator is possible. Maybe I'm going to have to try and do some digging through the creator source :(

      1 Reply Last reply
      0
      • M Offline
        M Offline
        MattB.au
        wrote on last edited by
        #8

        If anyone else stumbles across this thread and also wishes they could build iOS and Android targets with CMake (as you can for desktop applications) then please vote for this feature request on Qt's bug tracker

        https://bugreports.qt-project.org/browse/QTBUG-36384

        1 Reply Last reply
        0
        • J Offline
          J Offline
          jpo38
          wrote on last edited by
          #9

          Hi Hyblade,

          I think I'm having exactly the same problem as you had. Trying to migrate a huge CMake-based project (compiled with Visual Syudio on PC) to a QtCreator-based project (to target Android). I could do that for a helloworld sample program by writting a pro file manually and am now investigating how to generate .pro files automatically.

          Your macro looks good so I wanted to try it. But you did not post all. I'm missing the QMAKE_ADD_* macros, can you post them too?

          Thanks

          Jean

          1 Reply Last reply
          0
          • E Offline
            E Offline
            Elador
            wrote on last edited by
            #10

            Hi all,

            Is there an update to this? I'm very interested in this as well.

            1 Reply Last reply
            0
            • J Offline
              J Offline
              jpo38
              wrote on last edited by
              #11

              Hi Elador,

              With CMake, it's pretty easy to generate a .pro file manually. The syntax is very simple, only add your files and some keywords.

              I think today this is the best solution to compile CMake projects with QtCreator.

              Jean

              1 Reply Last reply
              0
              • L Offline
                L Offline
                LaurentGom
                wrote on last edited by
                #12

                Hi

                After being bored by writing duplicate .pro and CMake files for every new project, I ended up writing a CMake utility that combines every useful piece of code/information that I found on the subject. It uses an Android toolchain and the androidqtdeploy tool, to build and deploy APK files without QMake/QtCreator.

                This utility may be useful to anyone doing Qt/Android development with CMake. Don't hesitate to use or modify it freely.

                https://github.com/LaurentGomila/qt-android-cmake

                1 Reply Last reply
                0
                • L Offline
                  L Offline
                  LaurentGom
                  wrote on last edited by
                  #13

                  Hi

                  After being bored by writing duplicate .pro and CMake files for every new project, I ended up writing a CMake utility that combines every useful piece of code/information that I found on the subject. It uses an Android toolchain and the androidqtdeploy tool, to build and deploy APK files without QMake/QtCreator.

                  This utility may be useful to anyone doing Qt/Android development with CMake. Don't hesitate to use or modify it freely.

                  https://github.com/LaurentGomila/qt-android-cmake

                  1 Reply Last reply
                  0
                  • SGaistS Offline
                    SGaistS Offline
                    SGaist
                    Lifetime Qt Champion
                    wrote on last edited by
                    #14

                    Hi and welcome to devnet,

                    Looks pretty interesting ! Did you thought about contributing it to the Qt project ? That way more user may benefit from it

                    Interested in AI ? www.idiap.ch
                    Please read the Qt Code of Conduct - https://forum.qt.io/topic/113070/qt-code-of-conduct

                    1 Reply Last reply
                    0
                    • SGaistS Offline
                      SGaistS Offline
                      SGaist
                      Lifetime Qt Champion
                      wrote on last edited by
                      #15

                      Hi and welcome to devnet,

                      Looks pretty interesting ! Did you thought about contributing it to the Qt project ? That way more user may benefit from it

                      Interested in AI ? www.idiap.ch
                      Please read the Qt Code of Conduct - https://forum.qt.io/topic/113070/qt-code-of-conduct

                      1 Reply Last reply
                      0
                      • L Offline
                        L Offline
                        LaurentGom
                        wrote on last edited by
                        #16

                        I don't know if it would fit in the Qt project itself. Previous requests for a better CMake integration for Android were all rejected.

                        Anyway, if someone wants to integrate it, I'll be happy to help.

                        1 Reply Last reply
                        0
                        • L Offline
                          L Offline
                          LaurentGom
                          wrote on last edited by
                          #17

                          I don't know if it would fit in the Qt project itself. Previous requests for a better CMake integration for Android were all rejected.

                          Anyway, if someone wants to integrate it, I'll be happy to help.

                          1 Reply Last reply
                          0
                          • SGaistS Offline
                            SGaistS Offline
                            SGaist
                            Lifetime Qt Champion
                            wrote on last edited by
                            #18

                            I'd say it's worth asking on the "android-development mailing list":http://lists.qt-project.org/mailman/listinfo/android-development :)

                            Interested in AI ? www.idiap.ch
                            Please read the Qt Code of Conduct - https://forum.qt.io/topic/113070/qt-code-of-conduct

                            1 Reply Last reply
                            0
                            • SGaistS Offline
                              SGaistS Offline
                              SGaist
                              Lifetime Qt Champion
                              wrote on last edited by
                              #19

                              I'd say it's worth asking on the "android-development mailing list":http://lists.qt-project.org/mailman/listinfo/android-development :)

                              Interested in AI ? www.idiap.ch
                              Please read the Qt Code of Conduct - https://forum.qt.io/topic/113070/qt-code-of-conduct

                              1 Reply Last reply
                              0

                              • Login

                              • Login or register to search.
                              • First post
                                Last post
                              0
                              • Categories
                              • Recent
                              • Tags
                              • Popular
                              • Users
                              • Groups
                              • Search
                              • Get Qt Extensions
                              • Unsolved