Мезон: печать имени файла buildtarget из исполняемого файла()

#meson-build

Вопрос:

Я хотел бы распечатать имя файла из buildtarget созданного executable() . Заглядывая внутрь class Executable , я пытался ping.name :

 ping = executable('ping', [
        'ping.c',
        'ping_common.c',
        'ping6_common.c',
        'node_info.c',
        git_version_h
    ],
    include_directories : inc,
    dependencies : [ 
        cap_dep,
        idn_dep,
        intl_dep,
        m_dep,
        resolv_dep
    ],
    link_with : [libcommon],
    install: true)

message(ping.name))
 

Но это дает ошибку:

 ping/meson.build:23:17: ERROR: Expecting lparen got rparen.
 

То же самое для ping.filename , нет to_string() . Являются ли они «частными» или как-то скрытыми?

BuildTarget задокументирован, но метод не описан. Таким образом, в целом, как понять, какие методы являются общедоступными, а какие частными для определенного класса мезонов?

Ответ №1:

Лучшая ссылка для ссылки-это эта, так как в ней показаны все поддерживаемые методы. И в вашем случае это также должно сработать full_path() .:

 message(ping.full_path())
 

Если вам нужно только имя целевого файла , а его нет name() , то некоторые манипуляции со строками/массивами должны сработать:

 message(ping.full_path().split('/')[-1])
 

таким образом, он должен разделить полный путь на массив строк и вывести последний элемент массива.

Ответ №2:

name на самом деле это метод, который вы упустили (

 message(ping.name())
 

Комментарии:

1. Я тестировал разные вещи, в том числе ping.filename() , но не ping.name() . В конце концов, я собираюсь использовать простую строку, потому .name() что это от 0.54.0 , и мне также нужна поддержка более старых дистрибутивов.

2. Теперь я вижу, что действительно не хватает одного символа, поэтому он не тестировался как функция. Я также протестировал его как атрибуты message(ping.name) .

3. DSL Мезона не имеет никаких атрибутов, к вашему сведению, это всегда методы.