В этом простом CMakefile первый скрипт list.sh
выводит список из 2 сгенерированных файлов file1.proto;file2.proto
, инструктируя CMake, что их можно построить из источника source.xml
(используя второй скрипт gen.sh
).
cmake_minimum_required(VERSION 3.13)
set(source "source.xml")
execute_process(
COMMAND ${CMAKE_CURRENT_SOURCE_DIR}/list.sh ${source}
OUTPUT_VARIABLE protos
)
message("${protos}: ${source}")
add_custom_command(
OUTPUT ${protos}
COMMAND ${CMAKE_CURRENT_SOURCE_DIR}/gen.sh ${source}
DEPENDS ${source}
)
add_custom_target(my_target DEPENDS ${protos})
Все работает хорошо, если я запускаю:
$ cmake ..
file1.proto;file2.proto: source.xml
-- Configuring done
-- Generating done
-- Build files have been written to: /build
$ make my_target
[100%] Generating file1.proto, file2.proto
[100%] Built target my_target
Что я должен добавить, чтобы можно было также запускать генерацию кода с помощью:
$ make file1.proto
[ EDIT] autocomplete предлагает только следующее для команды make
:
$ make (TAB TAB)
all cmake_force edit_cache/ preinstall
clean default_target help preinstall/
clean/ depend my_target rebuild_cache
cmake_check_build_system edit_cache my_target/ rebuild_cache/