CMake Generator for IOS/Android projects?
-
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)
@ -
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
-
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
-
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.
-
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.
-
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
-
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
-
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.
-
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.
-
I'd say it's worth asking on the "android-development mailing list":http://lists.qt-project.org/mailman/listinfo/android-development :)
-
I'd say it's worth asking on the "android-development mailing list":http://lists.qt-project.org/mailman/listinfo/android-development :)