IscanderChe
Aug. 12, 2019, 4:05 p.m.

Не получить значение переменной из CMakeList.txt

cmake, Qt

Попробовал сделать пример по статье: Использование переменных объявленных в CMakeLists.txt внутри C++ файлов с помощью Qt Creator. Копилятор в ответ пишет: "'PROJECT_NAME' was not declared in this scope", "'SOFT_VERSION' was not declared in this scope".

CMakeList.txt

  1. cmake_minimum_required(VERSION 3.0)
  2. project(QtHelloWorldWithUi)
  3.  
  4. set(CMAKE_CXX_STANDARD 11)
  5.  
  6. set(VERSION_MAJOR 0)
  7. set(VERSION_MINOR 1)
  8. set(VERSION_PATCH 0)
  9. set(SOFT_VERSION ${VERSION_MAJOR}.${VERSION_MINOR}.${VERSION_PATCH})
  10.  
  11. # Указываем конфигурационный файл, из которого будет сгенерирован заголовочный файл
  12. configure_file(config.h.in config.h @ONLY)
  13.  
  14. # Find includes in corresponding build directories
  15. set(CMAKE_INCLUDE_CURRENT_DIR ON)
  16. # Instruct CMake to run moc automatically when needed
  17. set(CMAKE_AUTOMOC ON)
  18. # Create code from a list of Qt designer ui files
  19. set(CMAKE_AUTOUIC ON)
  20.  
  21. # включаем поиск библиотек с использованием find_package()
  22. # через REQUIRED указываем, что библиотеки обязательны
  23. find_package(Qt5Core REQUIRED)
  24. find_package(Qt5Gui REQUIRED)
  25. find_package(Qt5Widgets REQUIRED)
  26.  
  27. set(SOURCE_FILES main.cpp widget.h widget.cpp widget.ui)
  28. add_executable(${PROJECT_NAME} ${SOURCE_FILES})
  29.  
  30. # добавляем директорию с заголовочными файлами, чтобы увидеть сгенерированный файл
  31. include_directories(${CMAKE_CURRENT_BINARY_DIR})
  32.  
  33. # указываем, какие библиотеки необходимо подключить
  34. target_link_libraries(${PROJECT_NAME} Qt5::Core)
  35. target_link_libraries(${PROJECT_NAME} Qt5::Gui)
  36. target_link_libraries(${PROJECT_NAME} Qt5::Widgets)

config.h.in

  1. #ifndef CONFIG_H_IN
  2. #define CONFIG_H_IN
  3.  
  4. #define PROJECT_NAME "@PROJECT_NAME@" // подставляемые переменные заключаются в символ @
  5. #define VERSION_MAJOR "@VERSION_MAJOR@"
  6. #define VERSION_MINOR "@VERSION_MINOR@"
  7. #define VERSION_PATCH "@VERSION_PATCH@"
  8. #define SOFT_VERSION "@SOFT_VERSION@"
  9.  
  10. #endif // CONFIG_H_IN

widget.cpp

  1. #include "widget.h"
  2. #include "ui_widget.h"
  3.  
  4. Widget::Widget(QWidget *parent) :
  5. QWidget(parent),
  6. ui(new Ui::Widget)
  7. {
  8. ui->setupUi(this);
  9.  
  10. ui->projectNameLabel->setText("Project name: " + PROJECT_NAME);
  11. ui->projectVersionLabel->setText("Version: " + SOFT_VERSION);
  12. }
  13.  
  14. Widget::~Widget()
  15. {
  16. delete ui;
  17. }
2
The question is asked by the articleUsing variables declared in CMakeLists.txt inside C ++ files

Do you like it? Share on social networks!

2
Evgenii Legotckoi
  • Aug. 12, 2019, 4:13 p.m.
  • The answer was marked as a solution.

Добрый день!

А кто будет делать подключение файла?

  1. #include "widget.h"
  2. #include "ui_widget.h"
  3.  
  4. // Та-дам
  5. #include "config.h" // Добавляем автоматически генерируемый конфигуационный файл
  6. // Та-дам
  7.  
  8. Widget::Widget(QWidget *parent) :
  9. QWidget(parent),
  10. ui(new Ui::Widget)
  11. {
  12. ui->setupUi(this);
  13.  
  14. ui->projectNameLabel->setText("Project name: " + PROJECT_NAME);
  15. ui->projectVersionLabel->setText("Version: " + SOFT_VERSION);
  16. }
  17.  
  18. Widget::~Widget()
  19. {
  20. delete ui;
  21. }
    IscanderChe
    • Aug. 12, 2019, 4:26 p.m.

    Пропустил, да. Спасибо!

      Comments

      Only authorized users can post comments.
      Please, Log in or Sign up
      • Last comments
      • Evgenii Legotckoi
        March 9, 2025, 9:02 p.m.
        К сожалению, я этого подсказать не могу, поскольку у меня нет необходимости в обходе блокировок и т.д. Поэтому я и не задавался решением этой проблемы. Ну выглядит так, что вам действитель…
      • VP
        March 9, 2025, 4:14 p.m.
        Здравствуйте! Я устанавливал Qt6 из исходников а также Qt Creator по отдельности. Все компоненты, связанные с разработкой для Android, установлены. Кроме одного... Когда пытаюсь скомпилиров…
      • ИМ
        Nov. 22, 2024, 9:51 p.m.
        Добрый вечер Евгений! Я сделал себе авторизацию аналогичную вашей, все работает, кроме возврата к предидущей странице. Редеректит всегда на главную, хотя в логах сервера вижу запросы на правильн…
      • Evgenii Legotckoi
        Oct. 31, 2024, 11:37 p.m.
        Добрый день. Да, можно. Либо через такие же плагины, либо с постобработкой через python библиотеку Beautiful Soup
      • A
        Oct. 19, 2024, 5:19 p.m.
        Подскажите как это запустить? Я не шарю в программировании и кодинге. Скачал и установаил Qt, но куча ошибок выдается и не запустить. А очень надо fb3 переконвертировать в html