Tôi mới đến CMake và tôi có một vấn đề mà tôi không thể tìm ra một giải pháp. Tôi đang sử dụng CMake để biên dịch một dự án với một loạt các thư mục con tùy chọn và nó xây dựng các tệp thư viện được chia sẻ như mong đợi. Phần đó dường như hoạt động tốt. Mỗi thư mục con này chứa một tệp sql. Tôi cần phải concat tất cả các tập tin sql được chọn vào một tập tin tiêu đề sql và cài đặt kết quả. Vì vậy, một tập tin như:Sử dụng CMake, làm thế nào tôi có thể concat tập tin và cài đặt chúng
sql_header.sql
sub_dir_A.sql
sub_dir_C.sql
sub_dir_D.sql
Nếu tôi đã làm điều này trực tiếp trong một làm cho tập tin tôi có thể làm điều gì đó như sau chỉ thông minh hơn để đối phó với chỉ tiểu dirs chọn:
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"
Tôi có loại đã tìm ra các phần của điều này, như tôi có thể sử dụng:
LIST(APPEND PACKAGE_SQL_FILES "some_file.sql")
mà tôi cho rằng tôi có thể đặt trong mỗi tệp phụ tệp CMakeLists.txt để thu thập tên tệp. Và tôi có thể tạo macro như:
CAT(IN "${PACKAGE_SQL_FILES}" OUT "${INSTALL_PATH}/somefile.sql")
Nhưng tôi bị mất giữa thời điểm ban đầu CMake chạy và khi nó chạy từ cài đặt thực hiện. Có lẽ có một cách tốt hơn để làm điều này. Tôi cần điều này để làm việc trên cả Windows và Linux.
Tôi sẽ hài lòng với một số gợi ý để hướng tôi đi đúng hướng.
Sử dụng tốt cấu hình_file ... ;-) – DLRdave
Cảm ơn, điều này rất hữu ích.Đó là khó khăn để có được kết quả để bong bóng lên nếu bạn có nhiều thư mục ở nhiều độ sâu, nhưng tôi đã nhận nó để làm việc bằng cách sử dụng gợi ý rất hữu ích của bạn. Cảm ơn! –
Tôi đã thử điều này, và nó làm việc ... trừ khi tập tin có dấu chấm phẩy, tại thời điểm đó nó không thành công vì dấu chấm phẩy âm thầm tước ra. Đây là kết quả bình thường của dấu chấm phẩy là dấu phân tách danh sách trong cmake. Trường hợp thử nghiệm đơn giản nhất cho thấy vấn đề là 'tập (NỘI DUNG" a; b; c \ n ") tệp (WRITE out.txt $ {CONTENTS})' Bản sửa lỗi là nội dung báo giá khi viết, ví dụ: '" $ {CONTENTS} "' –