Skip to content
  • Categories
  • Recent
  • Tags
  • Popular
  • Users
  • Groups
  • Search
  • Get Qt Extensions
  • Unsolved
Collapse
Brand Logo
  1. Home
  2. Qt Development
  3. General and Desktop
  4. QT 5.2: using different kits in the same project -> CMake wizard not working as expected
QtWS25 Last Chance

QT 5.2: using different kits in the same project -> CMake wizard not working as expected

Scheduled Pinned Locked Moved General and Desktop
4 Posts 2 Posters 1.9k Views
  • 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.
  • G Offline
    G Offline
    GeertVc
    wrote on last edited by
    #1

    Hi,

    Windows XP, home edition, SP3.

    I have the following situation:

    • I create a project with Qt Creator
    • I want to have 2 versions of the application: one build for the i386 architecture, one build for the ARM architecture
    • I do have the ARM cross compiler (both gcc and g++), so no need for a toolchain build
    • I want to create two kits for the above: one kit that uses the standard gcc/g++ compiler (i386) and one kit that uses the cross compiler (arm-linux-gnueabi-gcc/g++).

    When creating the kits, I want to specify different compilation arguments for CMake in the CMake wizard:

    • For the i386 build, I want to specify -DCMAKE_BUILD_TYPE=Debug
    • For the ARM build, I want to specify -DCMAKE_BUILD_TYPE=Debug -DCROSS_COMPILE=arm-linux-gnueabi
      Note: I cannot add the last hyphen sign to the compiler prefix in the above cross compile string "arm-linux-gnueabi", otherwise the complete string is stroked through because of the way this forum acts on parts of a sentence starting and stopping with a hyphen...

    In the CMakeLists.txt file, I specify the following for the cross compiler variable:

    @SET(CMAKE_C_COMPILER ${CROSS_COMPILE}gcc)
    SET(CMAKE_CXX_COMPILER ${CROSS_COMPILE}g++)@

    What I'm expecting, is that when I switch kits, I do see different CMake arguments.

    • For the i386 build, I don't want to fill in the env variable CROSS_COMPILE, so the CMAKE_C_COMPILER should be gcc (and the like for the CXX flag). Therefore, I only specify -DCMAKE_BUILD_TYPE=Debug in the CMake wizard.
    • For the ARM build, I want the CROSS_COMPILE env var to be defined as "arm-linux-gnueabi-", so that the correct compiler is taken to cross compile. Therefore, I additionally specify -DCROSS_COMPILE=arm-linux-gnueabi in the CMake wizard.

    However, when switching kits, I do see that the arguments in the CMake wizard do NOT change. I always see -DCMAKE_BUILD_TYPE -DCROSS_COMPILE=arm-linux-gnueabi.

    This is not what I'm expecting.

    What's causing this behaviour? Is this a flaw in the CMake wizard? It looks like Qt Creator is caching its variables and does not update the files based on the kit selected.

    Best rgds,
    --Geert


    Best rgds,
    --Geert

    1 Reply Last reply
    0
    • W Offline
      W Offline
      Wim Van Loocke
      wrote on last edited by
      #2

      Hi Geert,

      i have been looking to this. Following is what i discovered:

      The cmake params are stored in the history of the m_argumentsLineEdit . There is only one instance for all kits.

      It contains a history of all params that have tried out ( entered in the arguments editline input field ). I have noticed also that a change of these params is not always taken into account when re-run cmake.

      I propose to store the cmake parameters also in the cbp file, and no longer in the history of the editline.

      I will give it a try!? as i don't know if there is a forum to propose solutions before starting to implement (contribute to ) it.

      Best regards,

      Wim

      1 Reply Last reply
      0
      • W Offline
        W Offline
        Wim Van Loocke
        wrote on last edited by
        #3

        Hi Geert,

        it seems al the processing and ( not correct) updating of cbp file and cache file is done by cmake itself,...

        So in qtcreator there is a need to store the cmake parameters per kit,... and apply them per kit.

        Best regards,

        Wim

        1 Reply Last reply
        0
        • W Offline
          W Offline
          Wim Van Loocke
          wrote on last edited by
          #4

          Hi Geert,

          some update.

          Cmake uses a CMakeCache file to add all options. Every time you add an option to cmake, it will be added to the cache file.

          To remove a certain cmake option, you can use cmake -U<cmake option>

          How ever this becomes complicated.

          What i propose to do, is when asked to rerun cmake, remove the cache file and rerun cmake with the correct option for your targer and kit.

          As such you can apply cross compiling.

          Qtcreator can be update to have some info on removing it, or by default completely remove the cache.

          Kind regards,

          Wim

          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