Duplicate and rename project in Qt6 with CMake
-
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:
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.
-
-
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
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.
-
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
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.
@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???
-
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
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.