Meson не находит библиотеки Boost

Вы можете сделать это с помощью одного вызова sed , не нужно читать файл дважды:

sed '$!n
w even
d' infile > odd

или, если хотите, в одной строке:

sed -e '$!n' -e 'w even' -e d infile > odd

Обратите внимание, что это не даст ожидаемый результат, если файл содержит только одну строку (строка будет иметь вид w , преобразованный в четный вместо нечетный в качестве первого n isn не выполнено). Чтобы этого избежать, добавьте условие:

sed -e '$!n' -e '1!{w even' -e 'd}' infile > odd

Как это работает? Ну, он использует три команды sed :
n - если не в последней строке , выведите пространство шаблонов на stdout (который перенаправляется в файл odd ), замените его следующей строкой (теперь она обрабатывает четную строку) и продолжите выполнение оставшихся команд
w - добавить пространство шаблонов в файл even
d - удалить текущее пространство шаблонов и перезапустить цикл - побочным эффектом этого является то, что sed никогда не будет автоматически печатать пространство шаблонов, поскольку он никогда не достигает конца скрипта

Другими словами, n выполняется только на нечетных строках, а w и d выполняются только на четных строках. sed никогда не выполняет автопечать, если, как я уже сказал, ввод не состоит из одной строки.

3
05.12.2017, 17:41
1 ответ

Проблема была устранена с помощью Исправить обнаружение включаемых каталогов с компилятором gnu и локалью, отличной от США , а для поиска и использования зависимостей в meson следует использовать dependency().

Чтобы найти буст в целом, вы должны иметь это в своемmeson.build:

project('myproj', 'cpp')
deps = [
    dependency('boost')
]
executable('myproj', 'main.cpp', dependencies: deps)

или это, если вам нужны определенные части усиления:

project('myproj', 'cpp')
deps = [
    dependency('boost', modules: ['system', 'filesystem'])
]
executable('myproj', 'main.cpp', dependencies: deps)

Если вы используете комбинацию cxx = meson.get_compiler('cpp')и cxx.find_library('boost_system'), вы не получите флаги компилятора и/или компоновщика. find_library()является примитивной проверкой компилятора и тестирует только разделяемые библиотеки в /usr/lib. Пользователь должен убедиться, что заголовки доступны с помощью has_header()и вручную определить каталог включения с помощьюdeclare_dependency(include_directories: '/usr/local/include/xxx)`.

dependency()— лучший способ поиска вещей, и вы должны использовать find_library(), только если проект не поддерживает pkg-configили cmake.

1
01.04.2020, 07:16

Теги

Похожие вопросы