Aquí es un ejemplo de cómo hacer esto ... Lo primero que necesita para encontrar el programa lzz
, para que utilice el comando find_program
:
find_program(LZZ_COMMAND lzz)
Ajusta LZZ_COMMAND
a la ruta del compilador. A continuación, utilice un comando personalizado CMake para compilar el archivo LZZ a sus archivos de cabecera de C++/implementación:
add_custom_command(
OUTPUT ${output}
COMMAND ${LZZ_COMMAND} -o ${CMAKE_CURRENT_BINARY_DIR} ${filename})
que genera los archivos en el directorio de construcción actual, en caso de que fuera de la fuente de construcciones. También tendrá que especificar que las salidas se generan archivos:
set_source_files_properties(${output} PROPERTIES GENERATED TRUE)
poner eso todos juntos y se obtiene un archivo CMakeLists.txt algo como esto:
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)
Es probable que también desee agregar incluya ruta y otras opciones para lzz eventualmente. Si coloca todas las cosas de Lazy C++ en un archivo de módulo e incluye eso desde CMakeLists.txt sería un poco más limpio. Pero esta es la idea básica.
Gracias, esto es justo lo que estaba buscando. – jjacksonRIAB
Cuando CMake genera un proyecto de Visual Studio, example.cpp y example.h aparecen en el explorador de soluciones en lugar de example.lzz. ¿Es posible revertir esto? – absence
Si se agrega una cláusula 'DEPEND $ {filename}' a la llamada 'add_custom_command', los archivos fuente se regeneran automáticamente si cambian los archivos lzz. – Sunday