Meson копирует / устанавливает заголовочные файлы в выходной каталог и сохраняет структуру папок - PullRequest
1 голос
/ 05 февраля 2020

По сути, я хотел бы иметь возможность сочетать функции install_subdir и install_headers.
Я хочу скопировать все заголовочные файлы из моего исходного каталога проекта в какой-то другой каталог и при этом сохранить структуру подкаталогов.

Источник

MyProject  
|-- folder1  
|   |-- file11.h  
|   |-- file11.cpp  
|   |-- file12.h  
|   `-- file12.cpp  
`-- folder2  
    `-- file21.h

Назначение


MyProject
|-- folder1
|   |-- file11.h
|   |-- file12.h
`-- folder2
    `-- file21.h

Я пытался скопировать исходный каталог и исключить все файлы cpp и просто использовать намеченную функцию install_headers(), но оба не сработали.
Я добавил комментарии к тому, что я сделал и почему. Может быть, кто-то знает, в чем дело:

project('MyProject', 'cpp')

test_src = [  'src/MyProject/folder1/file11.cpp'
              'src/MyProject/folder1/file12.cpp']

# Passing files seems to be preferred but exclude_files only takes list of strings
# test_src = files([  'src/MyProject/folder1/file11.cpp'
#                     'src/MyProject/folder1/file12.cpp'])

test_hdr = files([  'src/MyProject/folder1/file11.h',
                    'src/MyProject/folder1/file12.h',
                    'src/MyProject/folder2/file21.h'])


base_dir = meson.current_source_dir()

static_library('MyProject', name_prefix: '', name_suffix : 'lib', 
                sources: test_src,
                install: true,
                install_dir: base_dir + '/build/lib')

# Produces flat hierarchy       
install_headers(test_hdr, install_dir: base_dir + '/build/include')

# Also copies all cpp files into destination folder
install_subdir('src/MyProject', install_dir: base_dir + '/build/include', exclude_files: '*.cpp')

# Same result as wildcard exclusion
install_subdir('src/MyProject', install_dir: base_dir + '/build/include', exclude_files: test_src)

У кого-нибудь есть решение этой проблемы?
У меня есть полный список моих источников и заголовков, если это необходимо для какого-либо метода.
Я сейчас нахожусь копирование файлов с помощью команд оболочки, но включение этого в процесс установки / сборки было бы предпочтительным.

// РЕДАКТИРОВАНИЕ:
Я использую мезон-сборку на windows.

1 Ответ

0 голосов
/ 14 февраля 2020

Я нашел обходной путь, который делает то, что я хочу.
Если кто-то найдет лучшее решение для этого, которое требует список всех заголовочных файлов, не стесняйтесь ответить, и я приму его.

А пока вот что я сделал:

project('MyProject', 'cpp')


test_src = files([  'src/MyProject/folder1/file11.cpp',
                    'src/MyProject/folder1/file12.cpp' ])

# Note that i'm omitting the base folder here since exclude_files searches relative to the subdir path
# Also, forward slash doesnt work. You have to use double backslash
test_src_exclude = [  'folder1\\file11.cpp',
                      'folder1\\file12.cpp' ]

dir_base = meson.current_source_dir()
dir_install = join_paths(dir_base, 'build/meson-out/MyProject')
dir_install_hdr = join_paths(dir_install, 'include')

static_library('MyProject', name_prefix: '', name_suffix : 'lib', 
                sources: test_src,
                install: true,
                install_dir: dir_install)

install_subdir( 'src/MyProject', 
                install_dir: dir_install_hdr, 
                strip_directory: true,
                exclude_files: text_src_exclude)
...