12 августа 2019 г. 6:05

Не получить значение переменной из 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

cmake_minimum_required(VERSION 3.0)
project(QtHelloWorldWithUi)

set(CMAKE_CXX_STANDARD 11)

set(VERSION_MAJOR 0)
set(VERSION_MINOR 1)
set(VERSION_PATCH 0)
set(SOFT_VERSION ${VERSION_MAJOR}.${VERSION_MINOR}.${VERSION_PATCH})

# Указываем конфигурационный файл, из которого будет сгенерирован заголовочный файл
configure_file(config.h.in config.h @ONLY)

# Find includes in corresponding build directories
set(CMAKE_INCLUDE_CURRENT_DIR ON)
# Instruct CMake to run moc automatically when needed
set(CMAKE_AUTOMOC ON)
# Create code from a list of Qt designer ui files
set(CMAKE_AUTOUIC ON)

# включаем поиск библиотек с использованием find_package()
# через REQUIRED указываем, что библиотеки обязательны
find_package(Qt5Core REQUIRED)
find_package(Qt5Gui REQUIRED)
find_package(Qt5Widgets REQUIRED)

set(SOURCE_FILES main.cpp widget.h widget.cpp widget.ui)
add_executable(${PROJECT_NAME} ${SOURCE_FILES})

# добавляем директорию с заголовочными файлами, чтобы увидеть сгенерированный файл
include_directories(${CMAKE_CURRENT_BINARY_DIR})

# указываем, какие библиотеки необходимо подключить
target_link_libraries(${PROJECT_NAME} Qt5::Core)
target_link_libraries(${PROJECT_NAME} Qt5::Gui)
target_link_libraries(${PROJECT_NAME} Qt5::Widgets)

config.h.in

#ifndef CONFIG_H_IN
#define CONFIG_H_IN

#define PROJECT_NAME "@PROJECT_NAME@"    // подставляемые переменные заключаются в символ @
#define VERSION_MAJOR "@VERSION_MAJOR@"
#define VERSION_MINOR "@VERSION_MINOR@"
#define VERSION_PATCH "@VERSION_PATCH@"
#define SOFT_VERSION "@SOFT_VERSION@"

#endif // CONFIG_H_IN

widget.cpp

#include "widget.h"
#include "ui_widget.h"

Widget::Widget(QWidget *parent) :
    QWidget(parent),
    ui(new Ui::Widget)
{
    ui->setupUi(this);

    ui->projectNameLabel->setText("Project name: " + PROJECT_NAME);
    ui->projectVersionLabel->setText("Version: " + SOFT_VERSION);
}

Widget::~Widget()
{
    delete ui;
}
Рекомендуем хостинг TIMEWEB
Рекомендуем хостинг TIMEWEB
Стабильный хостинг, на котором располагается социальная сеть EVILEG. Для проектов на Django рекомендуем VDS хостинг.
2

Добрый день!

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

#include "widget.h"
#include "ui_widget.h"

// Та-дам
#include "config.h" // Добавляем автоматически генерируемый конфигуационный файл
// Та-дам

Widget::Widget(QWidget *parent) :
    QWidget(parent),
    ui(new Ui::Widget)
{
    ui->setupUi(this);

    ui->projectNameLabel->setText("Project name: " + PROJECT_NAME);
    ui->projectVersionLabel->setText("Version: " + SOFT_VERSION);
}

Widget::~Widget()
{
    delete ui;
}

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

Комментарии

Только авторизованные пользователи могут публиковать комментарии.
Пожалуйста, авторизуйтесь или зарегистрируйтесь
Donate

Здравствуйте, уважаемые пользователи EVILEG !!!

Если сайт вам помог, то поддержите разработку сайта финансово, пожалуйста.

Вы можете сделать это следующими способами:

Спасибо, Евгений Легоцкой

AS
13 декабря 2019 г. 6:05
Aruzhan Seraliyeva

C++ - Тест 003. Условия и циклы

  • Результат:50баллов,
  • Очки рейтинга-4
AS
13 декабря 2019 г. 5:47
Aruzhan Seraliyeva

C++ - Тест 001. Первая программа и типы данных

  • Результат:40баллов,
  • Очки рейтинга-8
Т
11 декабря 2019 г. 16:56
Тома

C++ - Тест 003. Условия и циклы

  • Результат:50баллов,
  • Очки рейтинга-4
Последние комментарии
9 декабря 2019 г. 3:41
Евгений Легоцкой

Эта ошибка invalid use of incomplete type ‘class Ui::AnotherWindow’ обычно говорит о том, что не найдено определение класса или структуры. Типичная проблема - не подключён заголовочны…
НБ
9 декабря 2019 г. 3:36
Николай Батманов

Ну, не настолько со мной всё полхо...))) Вроде бы. Я ж кнопки отрисовываю.
9 декабря 2019 г. 3:14
Евгений Легоцкой

Добрый день. У вас ui файлов по ходу нет. UI файлы используются для вёрстки в графическом дизайнере.
НБ
9 декабря 2019 г. 3:05
Николай Батманов

Здравствуйте! Полностью скопировал ваш пример к себе, чтобы разобраться. А он не хочет запускаться, дает ошибку: invalid use of incomplete type ‘class Ui::AnotherWindow’ ui(new Ui…
8 декабря 2019 г. 7:23
Евгений Легоцкой

У меня здесь есть одна старая статья с примером векторного редактора. Там есть ответы на ваши вопросы. Поизучайте Qt/C++ - Урок 072. Пример векторного редактора на Qt QGraphicsItem, QG…
Сейчас обсуждают на форуме
t
13 декабря 2019 г. 17:17
tantrido

Всё работает, при чём тут колхоз?! ;) https://doc.qt.io/qt-5/qtqml-cppintegration-data.html Если что-то не работает - вопрос к собственным рукам и знаниям. Вопрос не корректен - мож…
13 декабря 2019 г. 10:16
Руслан Волшебник

Да, я посмотрел, вы абсолютно правы. Единственное, если я правильно понял, если срабатывает условие if (aggregates["max_id"] - aggregates["min_id"]) + 1 == aggregates["count"]: return sel…
t
13 декабря 2019 г. 9:53
tantrido

Ответ >>
13 декабря 2019 г. 8:39
Александр Панюшкин

Вроде да. Только там начинаются вопросы с тем, чтобы виджет бы в фокусе, чтобы до виджета это событие долетало.
ДК
13 декабря 2019 г. 7:48
Джон Кофи

Привет. Есть класс "ждун", который используется на разных виджетах: class WaiterDialog;#define WAITER_DIALOG Singleton<WaiterDialog>::instance()class WaiterDialog : public QObject, …
EVILEG
О нас
Услуги
© EVILEG 2015-2019
Рекомендует хостинг TIMEWEB