2010-11-19 19 views
5

Trong dự án của tôi, tôi có một tệp "lược đồ" và tiện ích mà tôi đã viết để tạo một tệp tiêu đề. Tôi đang sử dụng cmake và ra khỏi xây dựng nguồn để xây dựng ứng dụng.Làm thế nào để tạo ra một tiêu đề trong nguồn với cmake?

Hiện tại tôi phải tạo lại tệp tiêu đề bằng tay rồi tạo ứng dụng.

Sau đó, tôi đã đưa ra tuyên bố này CMakeLists.txt, nhưng họ tạo ra các tiêu đề trong thư mục xây dựng thay vì trong thư mục nguồn.

configure_file(generator.pl generator COPYONLY) 
configure_file(schema.txt.in schema.txt COPYONLY) 
add_custom_command(
    OUTPUT generated.h 
    COMMAND ./generator schema.txt generated.h 
    DEPENDS mib_schema.txt.in generator.pl 
    COMMENT "Regenerating header file..." 
) 

Có thể tạo tiêu đề trong thư mục nguồn không?

chỉnh sửa (để phản ánh các câu trả lời):

Các tập tin có thể đi thẳng bằng cách tuyển đầy đủ đường đi của nó với một trong hai

${CMAKE_CURRENT_SOURCE_DIR} 

hay:

${CMAKE_CURRENT_BINARY_DIR} 

Vì vậy, để tạo tiêu đề trong thư mục nguồn của tôi, đoạn trích trước đó từ CMakeLists.txt sẽ trở thành:

add_custom_command(
    OUTPUT generated.h 
    COMMAND ${CMAKE_CURRENT_SOURCE_DIR}/generator.pl ${CMAKE_CURRENT_SOURCE_DIR}/schema.txt.in ${CMAKE_CURRENT_SOURCE_DIR}/generated.h 
    DEPENDS mib_schema.txt.in generator.pl 
    COMMENT "Regenerating header file..." 
) 

thực sự đơn giản hơn. Cảm ơn

--Để

+0

Đây thực sự là một ý tưởng tốt. Nếu tôi có thể lưu tập tin được tạo ra trong thư mục nguồn, nó được đưa vào gói nguồn chính xác những gì tôi muốn (vì cách đó người dùng thư viện của tôi không cần tạo tệp miễn là chúng không sửa đổi trình tạo và/hoặc tệp dữ liệu nguồn.) Điều này có nghĩa là nhiều người hơn có thể biên dịch thư viện của tôi! –

Trả lời

5

Tôi nghĩ rằng tiêu đề được tạo ra cũng được đặt trong thư mục nhị phân, vì bạn có thể muốn tạo để xây dựng danh bạ với cùng một nguồn và cấu hình khác nhau dẫn đến tiêu đề khác nhau được tạo ra.

Bạn có thể muốn bao gồm việc xây dựng thư mục để dự án của bạn:

include_directories(${CMAKE_CURRENT_BINARY_DIR}) 
+0

Nếu CMake gặp khó khăn trong việc tìm tệp của bạn, hãy hoàn toàn đủ điều kiện với '$ {CMAKE_CURRENT_BINARY_DIR}'. Nếu bạn chắc chắn rằng bạn muốn tạo các tệp trong thư mục nguồn, bạn thậm chí có thể sử dụng '$ {CMAKE_CURRENT_SOURCE_DIR}' trong các lệnh 'configure' và' add_custom_command'. – tibur

+0

Tôi đồng ý, nơi tốt nhất cho các tệp được tạo nằm trong thư mục xây dựng. Tiêu đề này thuận tiện trong thư mục nguồn vì nó cho phép hoàn thành mã hữu ích khi mã hóa. Nó là cùng một tiêu đề cho tất cả các cấu hình xây dựng, do đó, có nó trong thư mục nguồn không phải là vô hại ở tất cả. NB: Tôi đang gặp sự cố khi chỉnh sửa nhận xét, có thể vì tôi đang ở trên một mạng lớn đang băm nhỏ một IP duy nhất. Xin lỗi vì sự nhầm lẫn. – amso

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