add_custom_command не генерирует цель
Возможно, это невозможно, и я неправильно читаюдокументация по cmake 3.2, но я, хотя и создавая пользовательскую команду, создаю пользовательскую «цель» в Makefile, чтобы я мог построить цель, вызывая имя выходного файла. CMake Docs говорит:
В терминах makefile это создает новую цель в следующей форме:
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
неbar
.
Как мне это сделать?
В моем случае мне нужно выполнить специальный шаг обработки для стандартной исполняемой цели, которая вставляет необязательные ресурсы в файл ELF. Мне бы хотелось иметь возможность иметь оба исполняемых файла в качестве целей Makefile, чтобы я мог создать как исполняемый файл ELF, так и исполняемый файл ELF.
Если бы я писал собственный Makefile, это тривиально!
foo_in: foo.c
$(CC) foo_in: foo.c
$(CC) $< -o $@
foo_out: foo_in
post_process $< > $@
lt; -o $@
foo_out: foo_in
post_process foo_in: foo.c
$(CC) $< -o $@
foo_out: foo_in
post_process $< > $@
lt; > $@
И я могу сделатьmake foo_in
а такжеmake foo_out
.