Возможно, это невозможно, и я неправильно читаю документацию cmake 3.2, но, хотя создание пользовательской команды создало бы пользовательскую "целевую" в Makefile, чтобы я мог создать цель, вызывая имя выходного файла. В документах CMake говорится:
В make файлах создается новая цель в следующей форме:
OUTPUT: MAIN_DEPENDENCY DEPENDS COMMAND
поэтому я подумал, что могу запустить make OUTPUT
. Возможно, документация путает цели CMake с целями Makefile?
Например,
add_custom_command(OUTPUT foo_out
COMMAND post_process foo_in > foo_out
DEPENDS foo_in
)
Я хотел бы сделать
make foo_out
и он сделает foo_out
. Однако, если я это сделаю, я получаю
make: **** No rule to make target `foo_out`. Stop.
и, конечно же, слово "foo_out" не существует нигде в любом файле в каталоге двоичного вывода cmake. Если я изменю его на
add_custom_target(bar DEPENDS foo_out)
add_custom_command(OUTPUT foo_out COMMAND post_process foo_in > foo_out)
Тогда я могу сделать
make bar
и я могу сделать
make foo_in
но я все еще не могу сделать
make foo_out
Проблема с make bar
заключается в том, что она неинтуитивная, так как фактический вывод файла foo_out
not bar
.
Как мне это сделать?
В моем случае мне нужно запустить специальный шаг обработки к стандартной исполняемой цели, которая вставляет дополнительные файлы в файл ELF. Я хотел бы иметь возможность иметь оба исполняемых файла в качестве целевых файлов Makefile, поэтому я могу создать готовый исполняемый файл ELF, а также исполняемый файл ELF с вложением ресурсов.
Если бы я писал пользовательский Makefile, это тривиально!
foo_in: foo.c
$(CC) $< -o [email protected]
foo_out: foo_in
post_process $< > [email protected]
И я могу сделать make foo_in
и make foo_out
.