Russian Qt Forum
Май 23, 2024, 18:29 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: Как прочитать TARGET из заголовочного файла?  (Прочитано 10667 раз)
tux
Бывалый
*****
Offline Offline

Сообщений: 402



Просмотр профиля
« : Апрель 14, 2023, 00:37 »

Доброго времени суток!
Есть проект, в pro файле которого формируется довольно заковыристое имя исполнимого файла и помещается в TARGET.
В этом же проекте есть файл hpp (или cpp, это не так уж и важно) в котором надо как то прочитать этот TARGET и использовать, например, в заголовке формы.
Можно ли это сделать? Пробовал варианты типа $$TARGET, но так не работает.
Записан

Johnik
Крякер
****
Offline Offline

Сообщений: 339


Просмотр профиля
« Ответ #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 Offline

Сообщений: 4732



Просмотр профиля WWW
« Ответ #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
Бывалый
*****
Offline Offline

Сообщений: 402



Просмотр профиля
« Ответ #3 : Апрель 14, 2023, 19:30 »

а нельзя просто через
Код:
DEFINES += "TARGET=\"$$TARGET\""
?
Определить то можно, проблема потом достать.

Решение, предложенное Johnik вполне работает, спасибо! Хитрое решение. Улыбающийся
« Последнее редактирование: Апрель 14, 2023, 19:36 от tux » Записан

kambala
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4732



Просмотр профиля WWW
« Ответ #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 Offline

Сообщений: 339


Просмотр профиля
« Ответ #5 : Апрель 16, 2023, 11:28 »

kambala, Вы пробовали или чисто теоретически? Я пробовал, там без разницы есть кавычки или нет, код чтоб достать значение, должен быть примерно таким, как я привел.
Записан
kambala
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4732



Просмотр профиля WWW
« Ответ #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
Бывалый
*****
Offline Offline

Сообщений: 402



Просмотр профиля
« Ответ #7 : Апрель 16, 2023, 16:48 »

kambala, так вы решите только часть исходной проблемы. Которую я и так уже решил, ещё в первом посте "Пробовал варианты типа $$TARGET". Но мне надо было получить этот TARGET в заголовочном файле (или cpp). А там как раз и не получалось - Johnik подсказал решение.
Записан

Johnik
Крякер
****
Offline Offline

Сообщений: 339


Просмотр профиля
« Ответ #8 : Апрель 16, 2023, 21:48 »

теоретически Улыбающийся

в общем случае компилятор без проблем передает кавычки, вероятно проблема в 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 Offline

Сообщений: 4732



Просмотр профиля WWW
« Ответ #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
Бывалый
*****
Offline Offline

Сообщений: 402



Просмотр профиля
« Ответ #10 : Апрель 16, 2023, 22:43 »

речь шла о том как передать литеральные кавычки через DEFINES без необходимости GET_TARGET_IMPL трюков
У вас есть другое решение задачи? Приведённые "трюки" работают и в cpp и в hpp файлах.
Записан

kambala
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4732



Просмотр профиля WWW
« Ответ #11 : Апрель 16, 2023, 23:00 »

ну да, я ж его выше дал Улыбающийся
щас вот попробовал: надо вставлять кавычку как \\\", видимо первое экранирование для 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
Бывалый
*****
Offline Offline

Сообщений: 402



Просмотр профиля
« Ответ #12 : Апрель 16, 2023, 23:55 »

Кстати, да, так тоже работает. В винде пока не пробовал, завтра попробую.
P.S. В винде пробовал - всё работает.
« Последнее редактирование: Апрель 18, 2023, 20:10 от tux » Записан

Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.068 секунд. Запросов: 22.