Jestem nowy w CMake i mam problem, że nie mogę znaleźć rozwiązania. Używam CMake do kompilacji projektu z grupą opcjonalnych podkatalogów i buduje pliki biblioteki współdzielonej zgodnie z oczekiwaniami. Ta część wydaje się działać dobrze. Każdy z tych podkatalogów zawiera plik sql. Muszę połączyć wszystkie wybrane pliki sql w jeden plik nagłówkowy sql i zainstalować wynik. Więc jeden plik jak:Używanie CMake, jak mogę połączyć pliki i je zainstalować
sql_header.sql
sub_dir_A.sql
sub_dir_C.sql
sub_dir_D.sql
Gdybym zrobił to bezpośrednio w pliku make mogę zrobić coś jak następuje tylko inteligentniejsze do czynienia tylko z wybranych podrzędnych katalogów:
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"
mam porządek z zorientowali się kawałki to, jak mogę używać:
LIST(APPEND PACKAGE_SQL_FILES "some_file.sql")
które zakładam mogę umieścić w każdym z plików sub-katalogi CMakeLists.txt zbierać nazwy plików. I mogę utworzyć makro takie jak:
CAT(IN "${PACKAGE_SQL_FILES}" OUT "${INSTALL_PATH}/somefile.sql")
Ale jestem zagubiony między kiedy CMake początkowo działa i kiedy działa od make install. Być może jest lepszy sposób na zrobienie tego. Potrzebuję tego do pracy zarówno w systemie Windows, jak i Linux.
Byłbym szczęśliwy z pewnymi wskazówkami wskazującymi na mnie we właściwym kierunku.
Przyjemne użycie pliku configure_file ... ;-) – DLRdave
Dzięki, to było bardzo pomocne.Trudno jest uzyskać efekt bubble, jeśli masz wiele katalogów na wielu głębokościach, ale mam go do pracy z bardzo pomocnymi sugestiami. Dzięki! –
Próbowałem tego, i zadziałało ... chyba że plik ma średniki, w którym to się nie powiedzie, ponieważ średniki są po cichu rozebrane. Jest to normalna konsekwencja średników będących separatorem listy w cmake. Najprostszym przypadkiem testowym wskazującym problem jest plik 'set (CONTENTS" a; b; c \ n ") (WRITE out.txt $ {CONTENTS})' Poprawka polega na cytowaniu zawartości podczas pisania, np. '" $ {CONTENTS} "' –