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. Duplicate and rename project in Qt6 with CMake
QtWS25 Last Chance

Duplicate and rename project in Qt6 with CMake

Scheduled Pinned Locked Moved Unsolved General and Desktop
5 Posts 3 Posters 763 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.
  • B Offline
    B Offline
    Bert59
    wrote on 24 Aug 2021, 13:07 last edited by
    #1

    I just started to work with Qt6 and CMake. I wonder if someone knows how to duplicate and rename a project correctly. I would like that the duplicated and renamed project shows up in Qt Creator as the sample below:
    ebf69abb-3c8a-4b99-a5e9-c732e6a021b7-image.png

    I tried a few things:

    • Changing the hard coded names in CMake like below
      #project(Project_1 VERSION 0.1 LANGUAGES CXX)
      get_filename_component(ProjectId ${CMAKE_CURRENT_LIST_DIR} NAME)
      string(REPLACE " " "_" ProjectId ${ProjectId})
      project(${ProjectId} LANGUAGES CXX)

    • Deleteting CMakeLists.txt.user file and the build directory before loading the duplicated project

    But the project keeps either the old name or it doesn't load correctly.

    1 Reply Last reply
    0
    • V Offline
      V Offline
      VRonin
      wrote on 24 Aug 2021, 14:52 last edited by
      #2

      Can you post the contents of CMakeLists.txt?

      "La mort n'est rien, mais vivre vaincu et sans gloire, c'est mourir tous les jours"
      ~Napoleon Bonaparte

      On a crusade to banish setIndexWidget() from the holy land of Qt

      1 Reply Last reply
      1
      • B Offline
        B Offline
        Bert59
        wrote on 24 Aug 2021, 20:20 last edited by
        #3

        Hi

        After creating Project_1 the CMakeLists.txt looked like that

        cmake_minimum_required(VERSION 3.5)
        
        project(Project_1 VERSION 0.1 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)
        
        find_package(QT NAMES Qt6 Qt5 COMPONENTS Widgets REQUIRED)
        find_package(Qt${QT_VERSION_MAJOR} COMPONENTS Widgets REQUIRED)
        
        set(PROJECT_SOURCES
                main.cpp
                widget.cpp
                widget.h
                widget.ui
        )
        
        if(${QT_VERSION_MAJOR} GREATER_EQUAL 6)
            qt_add_executable(Project_1
                MANUAL_FINALIZATION
                ${PROJECT_SOURCES}
            )
        else()
            if(ANDROID)
                add_library(Project_1 SHARED
                    ${PROJECT_SOURCES}
                )
            else()
                add_executable(Project_1
                    ${PROJECT_SOURCES}
                )
            endif()
        endif()
        
        target_link_libraries(Project_1 PRIVATE Qt${QT_VERSION_MAJOR}::Widgets)
        
        set_target_properties(Project_1 PROPERTIES
            MACOSX_BUNDLE_GUI_IDENTIFIER my.example.com
            MACOSX_BUNDLE_BUNDLE_VERSION ${PROJECT_VERSION}
            MACOSX_BUNDLE_SHORT_VERSION_STRING ${PROJECT_VERSION_MAJOR}.${PROJECT_VERSION_MINOR}
        )
        
        if(QT_VERSION_MAJOR EQUAL 6)
            qt_finalize_executable(Project_1)
        endif()
        

        Then I changed it as follows

        cmake_minimum_required(VERSION 3.5)
        
        #project(Project_1 VERSION 0.1 LANGUAGES CXX)
        get_filename_component(ProjectId ${CMAKE_CURRENT_LIST_DIR} NAME)
        string(REPLACE " " "_" ProjectId ${ProjectId})
        project(${ProjectId} 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)
        
        find_package(QT NAMES Qt6 Qt5 COMPONENTS Widgets REQUIRED)
        find_package(Qt${QT_VERSION_MAJOR} COMPONENTS Widgets REQUIRED)
        
        set(PROJECT_SOURCES
                main.cpp
                widget.cpp
                widget.h
                widget.ui
        )
        
        if(${QT_VERSION_MAJOR} GREATER_EQUAL 6)
            qt_add_executable(${CMAKE_PROJECT_NAME}
                MANUAL_FINALIZATION
                ${PROJECT_SOURCES}
            )
        else()
            if(ANDROID)
                add_library(${CMAKE_PROJECT_NAME} SHARED
                    ${PROJECT_SOURCES}
                )
            else()
                add_executable(${CMAKE_PROJECT_NAME}
                    ${PROJECT_SOURCES}
                )
            endif()
        endif()
        
        target_link_libraries(${CMAKE_PROJECT_NAME} PRIVATE Qt${QT_VERSION_MAJOR}::Widgets)
        
        set_target_properties(${CMAKE_PROJECT_NAME} PROPERTIES
            MACOSX_BUNDLE_GUI_IDENTIFIER my.example.com
            MACOSX_BUNDLE_BUNDLE_VERSION ${PROJECT_VERSION}
            MACOSX_BUNDLE_SHORT_VERSION_STRING ${PROJECT_VERSION_MAJOR}.${PROJECT_VERSION_MINOR}
        )
        
        if(QT_VERSION_MAJOR EQUAL 6)
            qt_finalize_executable(${CMAKE_PROJECT_NAME})
        endif()
        

        But I got the following error
        02febd0a-3e89-4244-81ac-922c2b554b5c-image.png

        As I'm new to CMake I was not sure what to do.
        So after your response I tried to remove the following code

        #set_target_properties(${CMAKE_PROJECT_NAME} PROPERTIES
        #    MACOSX_BUNDLE_GUI_IDENTIFIER my.example.com
        #    MACOSX_BUNDLE_BUNDLE_VERSION ${PROJECT_VERSION}
        #    MACOSX_BUNDLE_SHORT_VERSION_STRING ${PROJECT_VERSION_MAJOR}.${PROJECT_VERSION_MINOR}
        #)
        

        Now it works but I don't know what will be the side effect of removing this block of code.

        After making the changes described above I copied the folder Project_1 and renamed it to Project_2.
        I also deleted the file CMakeLists.txt.user.
        Now wenn I load Project_2 in Qt Creator it displays Project_2 as expected.
        71715063-cc07-485b-a14b-299accecf314-image.png

        J V 2 Replies Last reply 1 Nov 2021, 12:28
        0
        • B Bert59
          24 Aug 2021, 20:20

          Hi

          After creating Project_1 the CMakeLists.txt looked like that

          cmake_minimum_required(VERSION 3.5)
          
          project(Project_1 VERSION 0.1 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)
          
          find_package(QT NAMES Qt6 Qt5 COMPONENTS Widgets REQUIRED)
          find_package(Qt${QT_VERSION_MAJOR} COMPONENTS Widgets REQUIRED)
          
          set(PROJECT_SOURCES
                  main.cpp
                  widget.cpp
                  widget.h
                  widget.ui
          )
          
          if(${QT_VERSION_MAJOR} GREATER_EQUAL 6)
              qt_add_executable(Project_1
                  MANUAL_FINALIZATION
                  ${PROJECT_SOURCES}
              )
          else()
              if(ANDROID)
                  add_library(Project_1 SHARED
                      ${PROJECT_SOURCES}
                  )
              else()
                  add_executable(Project_1
                      ${PROJECT_SOURCES}
                  )
              endif()
          endif()
          
          target_link_libraries(Project_1 PRIVATE Qt${QT_VERSION_MAJOR}::Widgets)
          
          set_target_properties(Project_1 PROPERTIES
              MACOSX_BUNDLE_GUI_IDENTIFIER my.example.com
              MACOSX_BUNDLE_BUNDLE_VERSION ${PROJECT_VERSION}
              MACOSX_BUNDLE_SHORT_VERSION_STRING ${PROJECT_VERSION_MAJOR}.${PROJECT_VERSION_MINOR}
          )
          
          if(QT_VERSION_MAJOR EQUAL 6)
              qt_finalize_executable(Project_1)
          endif()
          

          Then I changed it as follows

          cmake_minimum_required(VERSION 3.5)
          
          #project(Project_1 VERSION 0.1 LANGUAGES CXX)
          get_filename_component(ProjectId ${CMAKE_CURRENT_LIST_DIR} NAME)
          string(REPLACE " " "_" ProjectId ${ProjectId})
          project(${ProjectId} 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)
          
          find_package(QT NAMES Qt6 Qt5 COMPONENTS Widgets REQUIRED)
          find_package(Qt${QT_VERSION_MAJOR} COMPONENTS Widgets REQUIRED)
          
          set(PROJECT_SOURCES
                  main.cpp
                  widget.cpp
                  widget.h
                  widget.ui
          )
          
          if(${QT_VERSION_MAJOR} GREATER_EQUAL 6)
              qt_add_executable(${CMAKE_PROJECT_NAME}
                  MANUAL_FINALIZATION
                  ${PROJECT_SOURCES}
              )
          else()
              if(ANDROID)
                  add_library(${CMAKE_PROJECT_NAME} SHARED
                      ${PROJECT_SOURCES}
                  )
              else()
                  add_executable(${CMAKE_PROJECT_NAME}
                      ${PROJECT_SOURCES}
                  )
              endif()
          endif()
          
          target_link_libraries(${CMAKE_PROJECT_NAME} PRIVATE Qt${QT_VERSION_MAJOR}::Widgets)
          
          set_target_properties(${CMAKE_PROJECT_NAME} PROPERTIES
              MACOSX_BUNDLE_GUI_IDENTIFIER my.example.com
              MACOSX_BUNDLE_BUNDLE_VERSION ${PROJECT_VERSION}
              MACOSX_BUNDLE_SHORT_VERSION_STRING ${PROJECT_VERSION_MAJOR}.${PROJECT_VERSION_MINOR}
          )
          
          if(QT_VERSION_MAJOR EQUAL 6)
              qt_finalize_executable(${CMAKE_PROJECT_NAME})
          endif()
          

          But I got the following error
          02febd0a-3e89-4244-81ac-922c2b554b5c-image.png

          As I'm new to CMake I was not sure what to do.
          So after your response I tried to remove the following code

          #set_target_properties(${CMAKE_PROJECT_NAME} PROPERTIES
          #    MACOSX_BUNDLE_GUI_IDENTIFIER my.example.com
          #    MACOSX_BUNDLE_BUNDLE_VERSION ${PROJECT_VERSION}
          #    MACOSX_BUNDLE_SHORT_VERSION_STRING ${PROJECT_VERSION_MAJOR}.${PROJECT_VERSION_MINOR}
          #)
          

          Now it works but I don't know what will be the side effect of removing this block of code.

          After making the changes described above I copied the folder Project_1 and renamed it to Project_2.
          I also deleted the file CMakeLists.txt.user.
          Now wenn I load Project_2 in Qt Creator it displays Project_2 as expected.
          71715063-cc07-485b-a14b-299accecf314-image.png

          J Offline
          J Offline
          jgugenheim
          wrote on 1 Nov 2021, 12:28 last edited by
          #4

          @Bert59 This has come up for me a few times, for instance as one of several prototypes is selected as the real project. I have never successfully managed it and always end up copying and rewriting (with all the attendand dangers) the selected prototype files and ui into a new project.

          Can I vote for a "File->Save project as..." menu item please???

          jgugenheim

          Never underestimate the power of stupid people in large numbers

          1 Reply Last reply
          0
          • B Bert59
            24 Aug 2021, 20:20

            Hi

            After creating Project_1 the CMakeLists.txt looked like that

            cmake_minimum_required(VERSION 3.5)
            
            project(Project_1 VERSION 0.1 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)
            
            find_package(QT NAMES Qt6 Qt5 COMPONENTS Widgets REQUIRED)
            find_package(Qt${QT_VERSION_MAJOR} COMPONENTS Widgets REQUIRED)
            
            set(PROJECT_SOURCES
                    main.cpp
                    widget.cpp
                    widget.h
                    widget.ui
            )
            
            if(${QT_VERSION_MAJOR} GREATER_EQUAL 6)
                qt_add_executable(Project_1
                    MANUAL_FINALIZATION
                    ${PROJECT_SOURCES}
                )
            else()
                if(ANDROID)
                    add_library(Project_1 SHARED
                        ${PROJECT_SOURCES}
                    )
                else()
                    add_executable(Project_1
                        ${PROJECT_SOURCES}
                    )
                endif()
            endif()
            
            target_link_libraries(Project_1 PRIVATE Qt${QT_VERSION_MAJOR}::Widgets)
            
            set_target_properties(Project_1 PROPERTIES
                MACOSX_BUNDLE_GUI_IDENTIFIER my.example.com
                MACOSX_BUNDLE_BUNDLE_VERSION ${PROJECT_VERSION}
                MACOSX_BUNDLE_SHORT_VERSION_STRING ${PROJECT_VERSION_MAJOR}.${PROJECT_VERSION_MINOR}
            )
            
            if(QT_VERSION_MAJOR EQUAL 6)
                qt_finalize_executable(Project_1)
            endif()
            

            Then I changed it as follows

            cmake_minimum_required(VERSION 3.5)
            
            #project(Project_1 VERSION 0.1 LANGUAGES CXX)
            get_filename_component(ProjectId ${CMAKE_CURRENT_LIST_DIR} NAME)
            string(REPLACE " " "_" ProjectId ${ProjectId})
            project(${ProjectId} 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)
            
            find_package(QT NAMES Qt6 Qt5 COMPONENTS Widgets REQUIRED)
            find_package(Qt${QT_VERSION_MAJOR} COMPONENTS Widgets REQUIRED)
            
            set(PROJECT_SOURCES
                    main.cpp
                    widget.cpp
                    widget.h
                    widget.ui
            )
            
            if(${QT_VERSION_MAJOR} GREATER_EQUAL 6)
                qt_add_executable(${CMAKE_PROJECT_NAME}
                    MANUAL_FINALIZATION
                    ${PROJECT_SOURCES}
                )
            else()
                if(ANDROID)
                    add_library(${CMAKE_PROJECT_NAME} SHARED
                        ${PROJECT_SOURCES}
                    )
                else()
                    add_executable(${CMAKE_PROJECT_NAME}
                        ${PROJECT_SOURCES}
                    )
                endif()
            endif()
            
            target_link_libraries(${CMAKE_PROJECT_NAME} PRIVATE Qt${QT_VERSION_MAJOR}::Widgets)
            
            set_target_properties(${CMAKE_PROJECT_NAME} PROPERTIES
                MACOSX_BUNDLE_GUI_IDENTIFIER my.example.com
                MACOSX_BUNDLE_BUNDLE_VERSION ${PROJECT_VERSION}
                MACOSX_BUNDLE_SHORT_VERSION_STRING ${PROJECT_VERSION_MAJOR}.${PROJECT_VERSION_MINOR}
            )
            
            if(QT_VERSION_MAJOR EQUAL 6)
                qt_finalize_executable(${CMAKE_PROJECT_NAME})
            endif()
            

            But I got the following error
            02febd0a-3e89-4244-81ac-922c2b554b5c-image.png

            As I'm new to CMake I was not sure what to do.
            So after your response I tried to remove the following code

            #set_target_properties(${CMAKE_PROJECT_NAME} PROPERTIES
            #    MACOSX_BUNDLE_GUI_IDENTIFIER my.example.com
            #    MACOSX_BUNDLE_BUNDLE_VERSION ${PROJECT_VERSION}
            #    MACOSX_BUNDLE_SHORT_VERSION_STRING ${PROJECT_VERSION_MAJOR}.${PROJECT_VERSION_MINOR}
            #)
            

            Now it works but I don't know what will be the side effect of removing this block of code.

            After making the changes described above I copied the folder Project_1 and renamed it to Project_2.
            I also deleted the file CMakeLists.txt.user.
            Now wenn I load Project_2 in Qt Creator it displays Project_2 as expected.
            71715063-cc07-485b-a14b-299accecf314-image.png

            V Offline
            V Offline
            VRonin
            wrote on 1 Nov 2021, 15:13 last edited by
            #5

            @Bert59 said in Duplicate and rename project in Qt6 with CMake:

            #project(Project_1 VERSION 0.1 LANGUAGES CXX)

            If you comment out this line how is CMake supposed to know what the project name is? that's what the error is telling you

            "La mort n'est rien, mais vivre vaincu et sans gloire, c'est mourir tous les jours"
            ~Napoleon Bonaparte

            On a crusade to banish setIndexWidget() from the holy land of Qt

            1 Reply Last reply
            1

            • Login

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