Я новичок в CMake, и у меня есть проблема, из-за которой я не могу найти решение. Я использую CMake для компиляции проекта с кучей дополнительных поддиректоров, и он, как и ожидалось, строит файлы общей библиотеки. Эта часть, похоже, работает нормально. Каждый из этих поддиректоров содержит файл sql. Мне нужно выполнить все выбранные файлы sql в один файл заголовка sql и установить результат. Так один файл, как:Использование CMake, как я могу конкатенировать файлы и устанавливать их
sql_header.sql
sub_dir_A.sql
sub_dir_C.sql
sub_dir_D.sql
Если бы я сделал это непосредственно в замыкающий файл я мог бы сделать что-то вроде следующего только умнее, чтобы иметь дело только с выбранным суб-директорий:
cat sql_header.sql > "${INSTALL_PATH}/somefile.sql"
cat sub_dir_A.sql >> "${INSTALL_PATH}/somefile.sql"
cat sub_dir_C.sql >> "${INSTALL_PATH}/somefile.sql"
cat sub_dir_D.sql >> "${INSTALL_PATH}/somefile.sql"
У меня есть своего рода из выяснял куски этого, как я могу использовать:
LIST(APPEND PACKAGE_SQL_FILES "some_file.sql")
, который я предполагаю, что я могу разместить в каждом из файлов суб-каталоги CMakeLists.txt собирать имена файлов. И я могу создать макрос, как:
CAT(IN "${PACKAGE_SQL_FILES}" OUT "${INSTALL_PATH}/somefile.sql")
Но я теряюсь, когда между CMake изначально работает и когда он работает от марки установки. Возможно, есть лучший способ сделать это. Мне нужно это для работы как в Windows, так и в Linux.
Я был бы доволен некоторыми намеками, чтобы указать мне в правильном направлении.
Приятное использование configure_file ... ;-) – DLRdave
Спасибо, это было очень полезно.Это сложно сделать, чтобы получить результаты, если у вас несколько каталогов на нескольких глубинах, но я получил его для работы, используя ваши очень полезные советы. Благодаря! –
Я пробовал это, и это сработало ... если у файла нет точек с запятой, после чего он терпит неудачу, потому что точки с запятой молча стираются. Это нормальное следствие того, что точки с запятой являются разделителями списков в cmake. Простой тестовый пример, показывающий проблему, - 'set (CONTENTS" a; b; c \ n ") файл (WRITE out.txt $ {СОДЕРЖАНИЕ})' Исправление заключается в цитировании содержимого при записи, например. '' $ {CONTENTS} "' –