Dưới đây là một ví dụ về cách để làm điều này ... Trước tiên, bạn cần phải tìm chương trình lzz
, cho rằng sử dụng find_program
lệnh:
find_program(LZZ_COMMAND lzz)
này đặt LZZ_COMMAND
đến đường dẫn của trình biên dịch. Sau đó sử dụng một lệnh tùy chỉnh CMake để biên dịch các tập tin LZZ để tiêu đề C++/file thực thi của họ:
add_custom_command(
OUTPUT ${output}
COMMAND ${LZZ_COMMAND} -o ${CMAKE_CURRENT_BINARY_DIR} ${filename})
Đó tạo ra các tập tin trong thư mục build hiện tại, trong trường hợp bạn làm out-of-nguồn xây dựng. Bạn cũng sẽ cần phải xác định rằng các kết quả đầu ra được tập tin được tạo:
set_source_files_properties(${output} PROPERTIES GENERATED TRUE)
Đặt rằng tất cả với nhau và bạn sẽ có được một cái gì đó tập tin CMakeLists.txt như thế này:
cmake_minimum_required(VERSION 2.8)
project(lazy_test)
find_program(LZZ_COMMAND lzz)
function(lazy_compile filename)
get_filename_component(base ${filename} NAME_WE)
set(base_abs ${CMAKE_CURRENT_BINARY_DIR}/${base})
set(output ${base_abs}.cpp ${base_abs}.h)
add_custom_command(
OUTPUT ${output}
COMMAND ${LZZ_COMMAND} -o ${CMAKE_CURRENT_BINARY_DIR} ${filename})
set_source_files_properties(${output} PROPERTIES GENERATED TRUE)
endfunction()
lazy_compile(${CMAKE_CURRENT_SOURCE_DIR}/example.lzz)
add_executable(test example.cpp example.h)
Bạn có lẽ cũng muốn thêm bao gồm đường dẫn và các tùy chọn khác để lzz cuối cùng. Nếu bạn đặt tất cả các công cụ Lazy C++ vào một tập tin mô-đun và bao gồm rằng từ CMakeLists.txt nó sẽ là một chút sạch hơn. Nhưng đây là ý tưởng cơ bản.
Cảm ơn, đây chỉ là những gì tôi đang tìm kiếm. – jjacksonRIAB
Khi CMake tạo dự án Visual Studio, example.cpp và example.h hiển thị trong trình khám phá giải pháp thay vì example.lzz. Có thể đảo ngược điều này không? – absence
Nếu người ta thêm mệnh đề 'DEPEND $ {filename}' vào 'add_custom_command'-call thì các tệp nguồn sẽ tự động được tái tạo nếu các tệp lzz thay đổi. – Sunday