Russian Qt Forum
Ноябрь 06, 2024, 08:44
Добро пожаловать,
Гость
. Пожалуйста,
войдите
или
зарегистрируйтесь
.
Вам не пришло
письмо с кодом активации?
1 час
1 день
1 неделя
1 месяц
Навсегда
Войти
Начало
Форум
WIKI (Вики)
FAQ
Помощь
Поиск
Войти
Регистрация
Russian Qt Forum
>
Forum
>
Qt
>
Общие вопросы
>
Как прочитать TARGET из заголовочного файла?
Страниц: [
1
]
Вниз
« предыдущая тема
следующая тема »
Печать
Автор
Тема: Как прочитать TARGET из заголовочного файла? (Прочитано 11160 раз)
tux
Global Moderator
Бывалый
Offline
Сообщений: 404
Как прочитать TARGET из заголовочного файла?
«
:
Апрель 14, 2023, 00:37 »
Доброго времени суток!
Есть проект, в pro файле которого формируется довольно заковыристое имя исполнимого файла и помещается в TARGET.
В этом же проекте есть файл hpp (или cpp, это не так уж и важно) в котором надо как то прочитать этот TARGET и использовать, например, в заголовке формы.
Можно ли это сделать? Пробовал варианты типа $$TARGET, но так не работает.
Записан
Digital Art
Johnik
Крякер
Offline
Сообщений: 339
Re: Как прочитать TARGET из заголовочного файла?
«
Ответ #1 :
Апрель 14, 2023, 15:41 »
в *.pro
Код:
DEFINES += "TARGET=$$TARGET"
в *.cpp
Код:
#ifdef TARGET
#define GET_TARGET_IMPL_2(N) #N
#define GET_TARGET_IMPL_1(N) GET_TARGET_IMPL_2(N)
#define GET_TARGET() GET_TARGET_IMPL_1(TARGET)
#else
#define GET_TARGET() ""
#endif
int main(int argc, char *argv[])
{
std::cout << GET_TARGET();
}
Записан
kambala
Джедай : наставник для всех
Offline
Сообщений: 4746
Re: Как прочитать TARGET из заголовочного файла?
«
Ответ #2 :
Апрель 14, 2023, 17:42 »
а нельзя просто через
Код:
DEFINES += "TARGET=\"$$TARGET\""
?
Записан
Изучением C++ вымощена дорога в Qt.
UTF-8 has been around since 1993 and Unicode 2.0 since 1996; if you have created any 8-bit character content since 1996 in anything other than UTF-8, then I hate you. © Matt Gallagher
tux
Global Moderator
Бывалый
Offline
Сообщений: 404
Re: Как прочитать TARGET из заголовочного файла?
«
Ответ #3 :
Апрель 14, 2023, 19:30 »
Цитата: kambala от Апрель 14, 2023, 17:42
а нельзя просто через
Код:
DEFINES += "TARGET=\"$$TARGET\""
?
Определить то можно, проблема потом достать.
Решение, предложенное Johnik вполне работает, спасибо! Хитрое решение.
«
Последнее редактирование: Апрель 14, 2023, 19:36 от tux
»
Записан
Digital Art
kambala
Джедай : наставник для всех
Offline
Сообщений: 4746
Re: Как прочитать TARGET из заголовочного файла?
«
Ответ #4 :
Апрель 16, 2023, 10:17 »
не очень понял в чем проблема достать, если мы сразу в кавычки оборачиваем, а не через препроцессор
Записан
Изучением C++ вымощена дорога в Qt.
UTF-8 has been around since 1993 and Unicode 2.0 since 1996; if you have created any 8-bit character content since 1996 in anything other than UTF-8, then I hate you. © Matt Gallagher
Johnik
Крякер
Offline
Сообщений: 339
Re: Как прочитать TARGET из заголовочного файла?
«
Ответ #5 :
Апрель 16, 2023, 11:28 »
kambala, Вы пробовали или чисто теоретически? Я пробовал, там без разницы есть кавычки или нет, код чтоб достать значение, должен быть примерно таким, как я привел.
Записан
kambala
Джедай : наставник для всех
Offline
Сообщений: 4746
Re: Как прочитать TARGET из заголовочного файла?
«
Ответ #6 :
Апрель 16, 2023, 15:56 »
теоретически
в общем случае компилятор без проблем передает кавычки, вероятно проблема в qmake.
щас вот попробовал: надо вставлять кавычку как \\\", видимо первое экранирование для qmake, а второе — для шелла.
Код:
DEFINES += "TARGET=\\\"$$TARGET\\\""
Записан
Изучением C++ вымощена дорога в Qt.
UTF-8 has been around since 1993 and Unicode 2.0 since 1996; if you have created any 8-bit character content since 1996 in anything other than UTF-8, then I hate you. © Matt Gallagher
tux
Global Moderator
Бывалый
Offline
Сообщений: 404
Re: Как прочитать TARGET из заголовочного файла?
«
Ответ #7 :
Апрель 16, 2023, 16:48 »
kambala, так вы решите только часть исходной проблемы. Которую я и так уже решил, ещё в первом посте "Пробовал варианты типа $$TARGET". Но мне надо было получить этот TARGET в заголовочном файле (или cpp). А там как раз и не получалось - Johnik подсказал решение.
Записан
Digital Art
Johnik
Крякер
Offline
Сообщений: 339
Re: Как прочитать TARGET из заголовочного файла?
«
Ответ #8 :
Апрель 16, 2023, 21:48 »
Цитата: kambala от Апрель 16, 2023, 15:56
теоретически
в общем случае компилятор без проблем передает кавычки, вероятно проблема в qmake.
qmake не при чем он успешно скармливает компилю то, что указывается.
вот при такой строке
Код:
DEFINES += "TARGET=\"$$TARGET\""
вызов компилятора выглядит так (чуть сократил):
Код:
cl -c -nologo -Zc:wchar_t -FS -Zc:rvalueCast -Zc:inline -Zc:strictStrings -Zc:throwingNew -Zc:referenceBinding -Zc:__cplusplus -Zi -MDd -W3 -EHsc /Fdtmp\obj\test_1.vc.pdb -DUNICODE -D_UNICODE -DWIN32 -DWIN64 -DTARGET="test_1" -DQT_FORCE_ASSERTS -DQT_CORE_LIB -IC:\sources\samples\src\test_1 -Fotmp\obj\ @C:\Users\Johnik\AppData\Local\Temp\main.obj.20924.15.jom
main.cpp
среди всей этой строки можно увидеть:
Код:
-DTARGET="test_1"
Записан
kambala
Джедай : наставник для всех
Offline
Сообщений: 4746
Re: Как прочитать TARGET из заголовочного файла?
«
Ответ #9 :
Апрель 16, 2023, 21:59 »
речь шла о том как передать литеральные кавычки через DEFINES без необходимости GET_TARGET_IMPL трюков
Записан
Изучением C++ вымощена дорога в Qt.
UTF-8 has been around since 1993 and Unicode 2.0 since 1996; if you have created any 8-bit character content since 1996 in anything other than UTF-8, then I hate you. © Matt Gallagher
tux
Global Moderator
Бывалый
Offline
Сообщений: 404
Re: Как прочитать TARGET из заголовочного файла?
«
Ответ #10 :
Апрель 16, 2023, 22:43 »
Цитата: kambala от Апрель 16, 2023, 21:59
речь шла о том как передать литеральные кавычки через DEFINES без необходимости GET_TARGET_IMPL трюков
У вас есть другое решение задачи? Приведённые "трюки" работают и в cpp и в hpp файлах.
Записан
Digital Art
kambala
Джедай : наставник для всех
Offline
Сообщений: 4746
Re: Как прочитать TARGET из заголовочного файла?
«
Ответ #11 :
Апрель 16, 2023, 23:00 »
ну да, я ж его выше дал
Цитата: kambala от Апрель 16, 2023, 15:56
щас вот попробовал: надо вставлять кавычку как \\\", видимо первое экранирование для qmake, а второе — для шелла.
Код:
DEFINES += "TARGET=\\\"$$TARGET\\\""
Записан
Изучением C++ вымощена дорога в Qt.
UTF-8 has been around since 1993 and Unicode 2.0 since 1996; if you have created any 8-bit character content since 1996 in anything other than UTF-8, then I hate you. © Matt Gallagher
tux
Global Moderator
Бывалый
Offline
Сообщений: 404
Re: Как прочитать TARGET из заголовочного файла?
«
Ответ #12 :
Апрель 16, 2023, 23:55 »
Кстати, да, так тоже работает. В винде пока не пробовал, завтра попробую.
P.S. В винде пробовал - всё работает.
«
Последнее редактирование: Апрель 18, 2023, 20:10 от tux
»
Записан
Digital Art
Страниц: [
1
]
Вверх
Печать
« предыдущая тема
следующая тема »
Перейти в:
Пожалуйста, выберите назначение:
-----------------------------
Qt
-----------------------------
=> Вопросы новичков
=> Уроки и статьи
=> Установка, сборка, отладка, тестирование
=> Общие вопросы
=> Пользовательский интерфейс (GUI)
=> Qt Quick
=> Model-View (MV)
=> Базы данных
=> Работа с сетью
=> Многопоточное программирование, процессы
=> Мультимедиа
=> 2D и 3D графика
=> OpenGL
=> Печать
=> Интернационализация, локализация
=> QSS
=> XML
=> Qt Script, QtWebKit
=> ActiveX
=> Qt Embedded
=> Дополнительные компоненты
=> Кладовая готовых решений
=> Вклад сообщества в Qt
=> Qt-инструментарий
-----------------------------
Программирование
-----------------------------
=> Общий
=> С/C++
=> Python
=> Алгоритмы
=> Базы данных
=> Разработка игр
-----------------------------
Компиляторы и платформы
-----------------------------
=> Linux
=> Windows
=> Mac OS X
=> Компиляторы
===> Visual C++
-----------------------------
Разное
-----------------------------
=> Новости
===> Новости Qt сообщества
===> Новости IT сферы
=> Говорилка
=> Юмор
=> Объявления
Загружается...