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.

Ответы на вопрос(3)

Ваш ответ на вопрос