Добавление пользовательской команды с именем файла в качестве цели - PullRequest
7 голосов
/ 12 марта 2011

Я хотел бы сделать что-то вроде add_custom_command, с выходным файлом имя в качестве цели в сгенерированном make-файле. Есть ли элегантный способ делать это?

Все примеры, которые я видел (например, FAQ по CMake re: latex ), используют add_custom_command, чтобы указать, как создать желаемый выходной файл, а затем add_custom_target, чтобы создать цель. Например .:

add_executable (hello hello.c)
add_custom_command(OUTPUT hello.bin
                   COMMAND objcopy --output-format=binary hello hello.bin
                   DEPENDS hello
                   COMMENT "objcopying hello to hello.bin")
add_custom_target(bin ALL DEPENDS hello.bin)

Однако, имя цели в сгенерированном make-файле тогда будет bin чем hello.bin. Есть ли способ сделать hello.bin самой целью? в сгенерированном make-файле?

Некоторые решения, которые я пробовал, не работают:

  • Изменение на: add_custom_target(hello.bin ALL DEPENDS hello.bin) приводит к циклической зависимости в make-файле.

1 Ответ

4 голосов
/ 14 марта 2011

Вы можете сделать это, создав свой hello.bin как побочный эффект от цели.Вместо того, чтобы генерировать hello.bin из objcopy, вы генерируете hello.tmp.Затем в качестве побочного эффекта вы также копируете hello.tmp в hello.bin.Наконец, вы создаете фальшивую цель hello.bin, которая зависит от вашего hello.tmp.В коде:

add_executable (hello hello.c)
add_custom_command(OUTPUT hello.tmp
                   COMMAND objcopy --output-format=binary hello hello.tmp
                   COMMAND ${CMAKE_COMMAND} -E copy hello.tmp hello.bin
                   DEPENDS hello
                   COMMENT "objcopying hello to hello.bin")
add_custom_target(hello.bin ALL DEPENDS hello.tmp)

Проблема в том, что hello.bin не очищается при запуске clean.Чтобы это работало, добавьте:

set_directory_properties(PROPERTIES ADDITIONAL_MAKE_CLEAN_FILES hello.bin)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...