2014-06-16 18 views
5

Tôi có một dự án theo CMake với một số tập tin được tạo với máy phát điện python từ các tập tin XML. Tôi không thể chỉ định tất cả các tập tin được tạo ra bởi máy phát điện này trong CMakeLists.txt vì vậy tôi sử dụng tập tin globbing cho việc này.Làm thế nào để làm cho cấu hình lại CMake phụ thuộc vào tệp tùy chỉnh?

Vấn đề là khi tôi cập nhật các tệp XML hoặc nguồn phát của tôi (nằm trong cùng một kho lưu trữ), tôi muốn cấu hình lại hệ thống xây dựng của mình để thay đổi tệp khi xây dựng lại mã.).

Có thể làm CMake điều trị một số file như nó xử lý các file CMakeLists.txt và để làm cho nó tái tạo xây dựng hệ thống khi những tập tin được thay đổi?

Trả lời

3

Có, bạn sẽ có thể làm điều đó bằng (ab) sử dụng configure_file(). Định cấu hình một tệp làm cho nguồn phụ thuộc vào việc chạy CMake, do đó bất kỳ thay đổi nào trong đó cũng gây ra cấu hình lại. Đơn giản chỉ cần như thế này:

configure_file(MyInputFile.xml DummyOutput.xml) 
+0

Nó cấu hình lại dự án nhưng có một vấn đề khác. Tôi đang sử dụng add_custom_command và add_custom_target kích hoạt tái tạo các tệp nhưng các mục tiêu đó được thực hiện trong một thời điểm khác với cấu hình lại. Bạn có nghĩ là nó có thể chạy reconfigure ngay sau khi những mục tiêu này là xây dựng và sau đó CMake thể phát hiện sự thay đổi? Tôi 99% chắc chắn rằng không thể và tôi nghĩ rằng tôi sẽ bị buộc phải sử dụng execute_command thay vì add_custom_command nhưng nếu bạn biết câu trả lời tôi sẽ aprieciate nó. – Netrix

+0

@Netrix Bạn đang pha trộn thời gian. Các lệnh của 'add_custom_target' và 'add_custom_command' được thực hiện tại thời gian xây dựng (ví dụ: khi bạn chạy' make'). Điều này là khá không liên quan đến thời gian cấu hình CMake (khi CMake đang chạy). Khi thời gian xây dựng bắt đầu (tức là các lệnh tùy chỉnh đang chạy), CMake không còn trong hình ảnh - chạy của nó đã kết thúc. – Angew

+0

Tôi nghĩ vậy. Vì vậy, tôi đoán chỉ có giải pháp sẽ được để tạo ra tất cả các tập tin trong thời gian cấu hình với execute_process và sau đó tập tin (GLOB) những tập tin và thêm vào mục tiêu. Tôi có đúng không? – Netrix

10

Nó không yêu cầu bất kỳ loại giải pháp nào. Cách tiêu chuẩn là sử dụng CMAKE_CONFIGURE_DEPENDS thuộc tính:

set_property(DIRECTORY APPEND PROPERTY CMAKE_CONFIGURE_DEPENDS <filename>) 
+0

Bạn có thể làm * .xml trong tên tệp để chọn tất cả các tệp xml không? – Lucas

+0

@ lnunno chắc chắn bạn có thể sử dụng tệp (GLOB để có danh sách tệp và sau đó nối thêm danh sách. Tuy nhiên, bạn không nên sử dụng CMake mỗi khi bạn thêm tệp mới. – roolebo

Các vấn đề liên quan