Russian Qt Forum

Qt => Общие вопросы => Тема начата: tux от Апрель 14, 2023, 00:37



Название: Как прочитать TARGET из заголовочного файла?
Отправлено: tux от Апрель 14, 2023, 00:37
Доброго времени суток!
Есть проект, в pro файле которого формируется довольно заковыристое имя исполнимого файла и помещается в TARGET.
В этом же проекте есть файл hpp (или cpp, это не так уж и важно) в котором надо как то прочитать этот TARGET и использовать, например, в заголовке формы.
Можно ли это сделать? Пробовал варианты типа $$TARGET, но так не работает.


Название: Re: Как прочитать TARGET из заголовочного файла?
Отправлено: Johnik от Апрель 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();
}



Название: Re: Как прочитать TARGET из заголовочного файла?
Отправлено: kambala от Апрель 14, 2023, 17:42
а нельзя просто через
Код:
DEFINES += "TARGET=\"$$TARGET\""
?


Название: Re: Как прочитать TARGET из заголовочного файла?
Отправлено: tux от Апрель 14, 2023, 19:30
а нельзя просто через
Код:
DEFINES += "TARGET=\"$$TARGET\""
?
Определить то можно, проблема потом достать.

Решение, предложенное Johnik вполне работает, спасибо! Хитрое решение. :)


Название: Re: Как прочитать TARGET из заголовочного файла?
Отправлено: kambala от Апрель 16, 2023, 10:17
не очень понял в чем проблема достать, если мы сразу в кавычки оборачиваем, а не через препроцессор


Название: Re: Как прочитать TARGET из заголовочного файла?
Отправлено: Johnik от Апрель 16, 2023, 11:28
kambala, Вы пробовали или чисто теоретически? Я пробовал, там без разницы есть кавычки или нет, код чтоб достать значение, должен быть примерно таким, как я привел.


Название: Re: Как прочитать TARGET из заголовочного файла?
Отправлено: kambala от Апрель 16, 2023, 15:56
теоретически :)

в общем случае компилятор без проблем передает кавычки, вероятно проблема в qmake.

щас вот попробовал: надо вставлять кавычку как \\\", видимо первое экранирование для qmake, а второе — для шелла.

Код:
DEFINES += "TARGET=\\\"$$TARGET\\\""


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


Название: Re: Как прочитать TARGET из заголовочного файла?
Отправлено: Johnik от Апрель 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"


Название: Re: Как прочитать TARGET из заголовочного файла?
Отправлено: kambala от Апрель 16, 2023, 21:59
речь шла о том как передать литеральные кавычки через DEFINES без необходимости GET_TARGET_IMPL трюков


Название: Re: Как прочитать TARGET из заголовочного файла?
Отправлено: tux от Апрель 16, 2023, 22:43
речь шла о том как передать литеральные кавычки через DEFINES без необходимости GET_TARGET_IMPL трюков
У вас есть другое решение задачи? Приведённые "трюки" работают и в cpp и в hpp файлах.


Название: Re: Как прочитать TARGET из заголовочного файла?
Отправлено: kambala от Апрель 16, 2023, 23:00
ну да, я ж его выше дал :)
щас вот попробовал: надо вставлять кавычку как \\\", видимо первое экранирование для qmake, а второе — для шелла.

Код:
DEFINES += "TARGET=\\\"$$TARGET\\\""


Название: Re: Как прочитать TARGET из заголовочного файла?
Отправлено: tux от Апрель 16, 2023, 23:55
Кстати, да, так тоже работает. В винде пока не пробовал, завтра попробую.
P.S. В винде пробовал - всё работает.