Как скопировать все заголовки из проекта C++ с помощью premake

У меня есть проект C++ с исходными файлами (файлы .cpp и .h) в каталоге с именем src и его подкаталогами. Я хочу после компиляции моего проекта скопировать все файлы заголовков из этой исходной папки в другой каталог, сохранив структуру папок src.

Я попытался скопировать эти файлы с помощью команд после сборки:

postbuildcommands
{
    "{COPY} src/*.h include"
}

а также

postbuildcommands
{
    "{COPY} src/**.h include"
}

Но они копируют только файлы .h непосредственно в src, а не в подкаталоги. Например, это

src
+-- a.h
+-- a.cpp
+-- sub
|   +-- b.h
|   +-- b.cpp

становится

include
+-- a.h

вместо

include
+-- a.h
+-- sub
|   +-- b.h

person dranjohn    schedule 24.06.2019    source источник
comment
{COPY} заменяется на cp -rf (Unix) или xcopy /E ... (Windows), которые поддерживают копирование папок, но не соответствуют **. Если бы все ваши заголовки находились в отдельной папке, это было бы тривиально, но при объединении с cpp вам потребуется более сложная команда для их извлечения. У меня нет кросс-платформенного решения, поэтому это комментарий, а не ответ, но вы можете начать с этого в Linux: stackoverflow.com/ вопросов/10176849/ Если вы найдете эквивалент для Windows, добавьте обе команды в фильтры ОС, и все должно работать.   -  person hsandt    schedule 27.07.2020


Ответы (1)


Вы используете Windows Linux или Mac? Или он должен быть кроссплатформенным?

Похоже, что токен {copy} не передает флаг /s в xcopy в Windows https://github.com/premake/premake-core/wiki/Tokens https://docs.microsoft.com/en-us/windows-server/administration/windows-commands/xcopy

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

person Mihai Sebea    schedule 05.07.2019
comment
На самом деле токен {COPY} теперь содержит xcopy /Q /E /Y /I {args} в Windows, а /e копирует подпапки, даже если они пусты (так что даже сильнее, чем /s). Проблема для ОП в том, что он использует **, а не копию папки, которая, похоже, не работает с cp. - person hsandt; 27.07.2020